2012-08-30 68 views
1

复合材料部件我有一个复合标签类同此:阅读属性的文本值从组件树

<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(“值”)。 它似乎并不工作,如果我卡恩它的inputText节点上它给我“#{}价值”,这是不是我想要的。我无法想出一个方法来访问这个值。 有什么想法?

+0

有一个类似的问题和解决方案,JSF 2.0 http://stackoverflow.com/questions/8518046/programmatically-get-expression-value-of-facelets-parameter-variable – DRCB

回答

2

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

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

其中Object.class可以被真正的返回类型替换。请注意,它返回的值取决于评估表达式的确切时刻。它可能还不在EL范围内,或者它可能已经从EL范围中删除。