如何在JSF中设置HtmlOutputTag的值?

时间:2010-03-13 18:59:24

标签: java jsf jsf-2

我想在我的bean中动态创建控件。我正在使用JSF 2.0

HtmlOutputTag objHtmlOutputTag = new HtmlOutputTag();

现在我应该设置HtmlOutputTag的哪个属性来设置HtmlOutputTag的内容?

2 个答案:

答案 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)

作为usual,我的建议是不动态添加/删除组件。用另一种方式解决你的问题:

  • 切换组件的可见性
  • 重新绑定属于组件的数据

动态添加/删除组件始终是一个麻烦的来源,而且你可以用另一种方式更简单地做到这一点。

outputText组件易于使用:

<h:outputText value="#{BackingBean.myProperty}"/>

您在后台bean中为myProperty定义了一个getter / setter。如果你真的想以编程方式(除非你有强大的参数,我不鼓励这样做),这里有一个带动态表的example