JSF组件ID中生成的前缀j_idt33是什么?

Mah*_*leh 2 jsf icefaces jsf-2

我定义h:messages组件如下:

<h:messages id="summary"  styleClass="summary" globalOnly="true"/>
Run Code Online (Sandbox Code Playgroud)

但是当我用firebug检查元素时,我注意到id被翻译成类似于: j_idt33:summary

这个前缀是什么,为什么会产生?

Bal*_*usC 6

这是父的ID NamingContainer部件等<h:form>,<h:dataTable>,<ui:repeat>,<f:subview>,复合部件等

JSF使用父命名容器组件的ID预先生成生成的HTML客户端ID,以便在生成的HTML输出中多次重用组件时避免HTML客户端ID中的冲突,例如在表行或包含文件中或者复合组件等.具有相同ID的多个HTML元素是非法的.

您可以通过为NamingContainer组件提供固定ID 来抑制自动生成的ID.在你的特殊情况下,它很可能是<h:form>.所以给它一个固定的ID,例如

<h:form id="form">
    ...
Run Code Online (Sandbox Code Playgroud)

这种方式j_idt33:summary将成为form:summary.

  • 在JavaScript中你的意思是?当然.JavaScript看到并有权访问的是HTML DOM树,而不是JSF组件树.JavaScript在webbrowser中运行,而不是在webserver中运行.JSF在webserver中运行并生成HTML. (3认同)