JSF 组件 ID 中生成的前缀 j_idt33 是啥?
Posted
技术标签:
【中文标题】JSF 组件 ID 中生成的前缀 j_idt33 是啥?【英文标题】:What's the generated prefix j_idt33 in JSF component id?JSF 组件 ID 中生成的前缀 j_idt33 是什么? 【发布时间】:2012-01-06 22:17:52 【问题描述】:我定义 h:messages 组件如下:
<h:messages id="summary" styleClass="summary" globalOnly="true"/>
但是当我用 firebug 检查元素时,我注意到 id 被翻译成类似:j_idt33:summary
那个前缀是什么,为什么会生成它?
【问题讨论】:
【参考方案1】:这是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
。
【讨论】:
并且要通过 id 获取元素,我必须使用完整生成的 id 来获取它,而不是使用给定的 id,对吗? 在 javascript 中是什么意思?当然。 JavaScript 看到和可以访问的只是 HTML DOM 树,而不是 JSF 组件树。 JavaScript 在网络浏览器中运行,而不是在网络服务器中运行。 JSF 在 webserver 中运行并生成 HTML。以上是关于JSF 组件 ID 中生成的前缀 j_idt33 是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JSF 2.0 中从 javascript 中获取元素