[英]JSF2 EL not displayed in components IDs
我有以下代碼:
<ui:repeat var = "ctr" value = "#{bean.counterList}">
<h:outputLabel for = "message#{ctr}" value = "#{appMessage['No #{ctr} :" />
<h:inputText id="message#{ctr}" value="#{bean.messageList}" />
</ui:repeat>
counterList
是List<String>
。 如果列表在視圖中包含1, 2, 3
應該是3個輸入字段,其中包含ids: message1, message2, message3
。
EL對id屬性沒有影響,所有組件只接收消息作為ID。 另一方面,在標簽的價值中,EL效果很好。
我可以想象這可能是理想的行為但有解決方法嗎?
更新:
我刪除了id
屬性, ui:repeat
負責現在命名id。 從源代碼我可以看到生成的ID是唯一的,但現在拋出了這個警告:
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=fm-story:j_idt103:0:j_idt54[severity=(ERROR 2), summary=(Conversion Error setting value '' for 'null Converter'.), detail=(Conversion Error setting value '' for 'null Converter'.)]
sourceId=fm-story:j_idt103:1:j_idt54[severity=(ERROR 2), summary=(Conversion Error setting value '' for 'null Converter'.), detail=(Conversion Error setting value '' for 'null Converter'.)]
我沒有檢查它,但正確的行為將是以下形式:
<ui:repeat var = "ctr" value = "#{bean.counterList}">
<h:outputLabel for="message" value="#{appMessage['No #{ctr} :" />
<h:inputText id="message" value="#{bean.messageList}" />
</ui:repeat>
組件標識符 message
不會改變; 客戶端標識符 (例如, fm-story:j_idt103:0:message
)將在生命周期處理期間逐行更改。 標簽組件for
屬性算法將能夠找到使用“消息”,因為它們共享一個命名容器輸入組件。
我有同樣的問題... 如何在ui:repeat中設置h:panelGroup的id
你不能用ui重復設置id:重復(看看上面的鏈接)
您可以使用<c:forEach
像這樣
<c:forEach var = "ctr" items = "#{bean.counterList}">
<h:outputLabel for = "message#{ctr}" value = "#{appMessage['No #{ctr} :" />
<h:inputText id="message#{ctr}" value="#{bean.messageList}" />
</c:forEach>
(但你應該只清楚 JSTL如何在Facelets中工作)
您不應該嘗試手動索引完整的JSF迭代組件內的組件的ID,如<ui:repeat>
, <h:dataTable>
等。 這只會導致你經歷過的災難。 它將在JSTL <c:forEach>
運行,因為它在構建JSF組件樹時作為視圖構建時標記運行,而不是在生成HTML輸出時。 <c:forEach>
也會生成與迭代一樣多的JSF組件。
只需省略id
屬性中的任何EL。 JSF組件將擔心自動設置正確的客戶端ID。 此外,您可以使用<ui:repeat>
varStatus
屬性來獲取當前循環計數和索引。 這樣您就不需要2個列表。 計數將顯示當前輪次。 索引是必需的,以便通過索引獲取/設置List<String>
的值。 <h:inputText value="#{message}" />
即不起作用,因為String
類沒有setter。
<ui:repeat value="#{bean.messageList}" var="message" varStatus="loop">
<h:outputLabel for="message" value="#{appMessage['No']} #{loop.count}:" />
<h:inputText id="message" value="#{bean.messageList[loop.index]}" />
</ui:repeat>
(如果需要,可以從上面的代碼段中省略var="message"
,因為它在任何地方都沒有使用)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.