如何在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页面中的最终结果应如下所示:
也就是说,根据function需求,可能确实有更好,更清洁的方法来解决function需求。 如果你愿意,你可以详细说明它,以便我们可以在必要时提出更好的方法。
像往常一样 ,我的建议是不动态添加/删除组件。 以另一种方式解决您的问题:
- 切换组件的可见性
- 重新绑定属于组件的数据
动态添加/删除组件始终是一个麻烦的来源,您可以通过另一种方式更简单地执行此操作。
outputText
组件易于使用:
并在您的支持bean中为myProperty
定义一个getter / setter。 如果你真的想以编程方式(除非你有强大的参数我不鼓励),这里有一个动态表的例子 。