如何在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。 如果你真的想以编程方式(除非你有强大的参数我不鼓励),这里有一个动态表的例子 。