【发布时间】:2012-01-06 22:17:52
【问题描述】:
我定义 h:messages 组件如下:
<h:messages id="summary" styleClass="summary" globalOnly="true"/>
但是当我用 firebug 检查元素时,我注意到 id 被翻译成类似:j_idt33:summary
那个前缀是什么,为什么会生成它?
【问题讨论】:
我定义 h:messages 组件如下:
<h:messages id="summary" styleClass="summary" globalOnly="true"/>
但是当我用 firebug 检查元素时,我注意到 id 被翻译成类似:j_idt33:summary
那个前缀是什么,为什么会生成它?
【问题讨论】:
这是NamingContainer父组件的ID,如<h:form>、<h:dataTable>、<ui:repeat>、<f:subview>、复合组件等。
JSF 会在生成的 HTML 客户端 ID 前加上父命名容器组件的 ID,以避免在生成的 HTML 输出中多次重用组件时(例如在表格行中)或在 HTML 客户端 ID 中发生冲突一个包含文件,或者一个复合组件等。具有相同ID的多个HTML元素是非法的。
您可以通过为 NamingContainer 组件提供固定 ID 来禁止自动生成的 ID。在您的特定情况下,它很可能是<h:form>。所以给它一个固定的ID,例如
<h:form id="form">
...
这样j_idt33:summary 将变为form:summary。
【讨论】: