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