如何在 JSF 中设置 HtmlOutputTag 的值?
题
我想在我的 bean 中动态创建控件。我正在使用 JSF 2.0
HtmlOutputTag objHtmlOutputTag = new HtmlOutputTag();
现在哪个属性 HtmlOutputTag
我应该设置设置的内容 HtmlOutputTag
?
解决方案
这 HtmlOutputTag
代表一个标签,而不是一个组件。而是使用 HtmlOutputText
. 。然后,您只需设置 value
属性,就像您在 JSF 页面中的真实组件中所做的那样。如果你需要它成为 ValueExpression
而不是原始的 value
, ,那么你需要使用创建它 ExpressionFactory#createValueExpression()
. 。这是一个启动示例:
HtmlOutputText text = new HtmlOutputText();
text.setValueExpression("value", createValueExpression("#{bean.property}", String.class));
方便方法在哪里 createValueExpression()
这里看起来像:
private static ValueExpression createValueExpression(String valueExpression, Class<?> valueType) {
FacesContext context = FacesContext.getCurrentInstance();
return context.getApplication().getExpressionFactory()
.createValueExpression(context.getELContext(), valueExpression, valueType);
}
将其隐藏在某个实用程序类中很远的地方,这样您就不需要一次又一次地重复所有代码;) valueType
参数显然应该代表属性的实际类型。
JSF 页面中的最终结果应如下所示:
<h:outputText value="#{bean.property}" />
也就是说,根据功能需求,确实可能有更好、更干净的方法来解决功能需求。如果您愿意,您可以详细说明一下,以便我们在必要时提出更好的方法。
不隶属于 StackOverflow