簡體   English   中英

JSF2 EL未顯示在組件ID中

[英]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>

counterListList<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM