我有一个类似的复合标签:
<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}”这不是我想要的。我无法想办法访问这个值。 有什么想法吗?
答案 0 :(得分:2)
您可以使用Application#evaluateExpressionGet()
以编程方式评估EL表达式。
FacesContext context = FacesContext.getCurrentInstance();
Object value = context.getApplication().evaluateExpressionGet(
context, "#{some.el.expression}", Object.class);
Object.class
可以用实际返回类型替换。请注意,无论它返回什么,都取决于您评估表达式时的确切时刻。它可能不在EL范围内,或者它可能已经从EL范围中删除。