2012-08-30 45 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範圍中刪除。