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,如&lt;h:form&gt;&lt;h:dataTable&gt;&lt;ui:repeat&gt;&lt;f:subview&gt;、复合组件等。

JSF 会在生成的 html 客户端 ID 前加上父命名容器组件的 ID,以避免在生成的 HTML 输出中多次重用组件时(例如在表格行中)或在 HTML 客户端 ID 中发生冲突一个包含文件,或者一个复合组件等。具有相同ID的多个HTML元素是非法的。

您可以通过为 NamingContainer 组件提供固定 ID 来禁止自动生成的 ID。在您的特定情况下,它很可能是&lt;h:form&gt;。所以给它一个固定的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 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 scss 辅助方法中生成的资产路径具有重复的资产前缀

在 JSF 中生成自己的会话 ID

如何在 JSF 2.0 中从 javascript 中获取元素

TeamCity,将在一个构建步骤中生成的 id 传递到后面的构建步骤

jpa中生成的表中的错误排序

如何计算聚合中生成的分组对象?