我想在我的bean中动态创建控件。我正在使用JSF 2.0
HtmlOutputTag objHtmlOutputTag = new HtmlOutputTag();
现在我应该设置HtmlOutputTag
的哪个属性来设置HtmlOutputTag
的内容?
答案 0 :(得分:5)
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}" />
也就是说,根据功能要求,可能确实有更好,更清洁的方法来解决功能需求。如果你愿意,你可以详细说明一下,以便我们可以在必要时提出更好的方法。
答案 1 :(得分:1)