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