从组件树中读取复合组件的属性的文字值

时间:2012-08-30 20:39:05

标签: java jsf-2

我有一个类似的复合标签:

<ui:decorate template="....">
   <ui:define name="...">
       <h:inputText value="#{value}"/>
   </ui:define>
</ui:decorate>

用于

之类的页面
<ns:tag value="#{some.el.expression}"/>

它可以正常工作。现在我想从java代码访问“some.el.expression”。我需要与 component.getValueExpression(“value”)类似的东西。 它似乎不起作用,如果我在inputText节点上它,它给我“#{value}”这不是我想要的。我无法想办法访问这个值。 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用Application#evaluateExpressionGet()以编程方式评估EL表达式。

FacesContext context = FacesContext.getCurrentInstance();
Object value = context.getApplication().evaluateExpressionGet(
    context, "#{some.el.expression}", Object.class);

Object.class可以用实际返回类型替换。请注意,无论它返回什么,都取决于您评估表达式时的确切时刻。它可能不在EL范围内,或者它可能已经从EL范围中删除。