我有一个与此类似的复合标签:
<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}”,这不是我想要的。我无法找到访问该值的方法。 有什么想法吗?
最佳答案
您可以使用Application#evaluateExpressionGet()
以编程方式计算 EL 表达式。
FacesContext context = FacesContext.getCurrentInstance();
Object value = context.getApplication().evaluateExpressionGet(
context, "#{some.el.expression}", Object.class);
其中Object.class
可以替换为真实的返回类型。请注意,它返回的任何内容都取决于您评估表达式的确切时刻。它可能尚未位于 EL 范围内,或者可能已从 EL 范围中删除。
关于java - 从组件树中读取复合组件属性的字面值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12205103/