2013-04-02 97 views
1

我正在使用JSTL forEach和ah創建一個動態表:dataTable,並且所有的控件和潛在的錯誤信息都很好地顯示出來,但我現在堅持要爲每個控件獲取值。我將需要創建(我認爲)一個動態EL表達式來設置值,但還沒有能夠讓我的任何版本工作。我希望使用c:out構建表達式,但發現該標記在JSF2中不可用。JSF2構建動態EL表達式

那麼,是否有可能在頁面中構建動態表達式? 如果控件尚未構建,如何在後臺bean中設置表達式?

<h:dataTable id="dtDetails" styleClass="slate_table" value="#{remediationDetail.eventList}" var="dataItem"> 
<c:forEach items="#{remediationDetail.eventHeaders}" var="key"> 
    <h:column> 
     <f:facet name="header">#{key.fieldDefinition.fieldConfiguration.customLabel}</f:facet> 
     <h:inputText value="" id="txtNumber" styleClass="remediation_textbox error_marker" title="#{remediationDetail.errorMessages(dataItem.id, key.fieldDefinition.id)}"> 
      <f:convertNumber maxFractionDigits="0" maxIntegerDigits="19"/> 
    </h:column> 
</c:forEach> 
</h:dataTable> 

一如既往,任何幫助或方向表示讚賞。

問候,

邁克

+0

我覺得你會擁有時的foreach將創建一個以上的inputText具有相同id.U可避免這種情況發生的一個問題如果u省略了id屬性。 – Bardelman

+0

你是否試圖寫下如下內容:#{remediationDetail.errorMessages(#{dataItem.id},#{key.fieldDefinition.id}? – Bardelman

+0

我還沒有走下那條路,但很快就會到來。表達式會更快,因爲我會知道引用表達式的確切變量/方法。調用backing bean將使我使用反射並在對象變量中運行循環。在JSF接管並且頁面爲 – MikeR

回答

0

我沒有能夠創建一個動態EL表達式。所以,我結束了使用c:forEach的索引來幫助定義我正在尋找的值。對於這個結果唯一的解決方法就是我期望我將要顯示的數據在數組中具有相同數量的位置。

<c:forEach items="#{remediationDetail.eventHeaders}" var="key" varStatus="looper"> 
    <h:column> 
     <f:facet name="header">#{key.fieldDefinition.fieldConfiguration.customLabel}</f:facet> 
<h:inputText id="txtNumber" value="#{dataItem.entityList[looper.index].val}"> 
    <f:convertNumber maxFractionDigits="0" maxIntegerDigits="19"/> 
</h:inputText> 
    </h:column> 
</c:forEach> 
0

在我的情況下,以下內容有助於構建動態EL。

<ui:param name="beanName" value="myBackedBean"/> 
<ui:param name="propertyName" value="field1"/> 
<ui:param name="nestedPropertyName" value="field1"/> 

<p:inputTextarea value="#{sessionScope[beanName][propertyName][nestedPropertyName]}"/> 

的靈感來自這個topic