[英]Jsf How to create a Naming Container
我的JSF應用程序中存在重復ID的問題。 我在這篇文章中讀過,其中一個可能的解決方案是使用命名容器。 你能給我一些例子來說明如何使用命名容器來避免重復的id問題嗎? 我使用Facelets。
這對我來說使用JSF1.2和facelets是有用的:
我發現<ui:composition>
和<ui:component>
實際上都不是命名容器,因此在同一表單中多次使用同一個組件會因重復的ID異常而失敗。 這似乎是一個糟糕的設計,因為組件的重點是可重用性。 為了解決這個問題,我在每個組件中包含一個<f:subview>
,並將其上的id設置為我的組件標記的參數:
myComponent.xhtml:
<ui:component>
<f:subview id="#{id}">
....component code
</f:subview>
</ui:component>
並且在其他頁面上使用它很簡單(在正確設置taglib.xml和web.xml之后):
<myTagLib:myComponent id="myCompA" />
我建議退后一步,研究為什么會出現重復的ID問題。 一旦你確定了根本原因,然后只需修復它“通常”的方式,而不是創建自己的UINamingContainer
組件。
重復ID錯誤有幾種可能的原因,這有助於您進一步確定錯誤:
UINamingContainer
組件內的不同 UIComponent
上使用相同的 ID。 UIComponent
屬性。 f:subview
已在父頁面而不是包含頁面中聲明。 UINamingContainer
組件。 new UIComponent()
), 但未分配ID。 這里, UINamingContainer
位於<h:form>
, <h:dataTable>
和<f:subview>
之下。
如果以上建議沒有幫助,那么更新您的問題以包含盡可能小的代碼片段(因此, 沒有所有不相關的代碼/混亂,如不相關的組件,庫,HTML / CSS / JS /等),它們通過以下方式重現完全相同的問題:只是復制'n'paste'n'運行它沒有任何變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.