【问题标题】: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

那个前缀是什么,为什么会生成它?

【问题讨论】:

    标签: jsf jsf-2 icefaces


    【解决方案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。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 2011-08-23
    相关资源
    最近更新 更多