2011-11-26 36 views
2

我定义H:邮件组件,如下所示:JSF组件ID中生成的前缀j_idt33是什么?

<h:messages id="summary" styleClass="summary" globalOnly="true"/> 

,但是当我使用Firebug检查单元,我注意到,ID被翻译成这样的:j_idt33:summary

那是什么前缀,以及它为什么产生?

回答

6

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

JSF预先考虑与亲本namingcontainer组件的ID生成的HTML的客户端ID,以避免每当组件在生成的HTML输出中重复使用多次(例如在表格行,包含文件或复合组件中等)时,都会在HTML客户端ID中发生冲突。多个HTML元素具有相同的属性是非法的ID。

您可以通过给NamingContainer组件一个固定ID来禁止自动生成的ID。在你的具体情况下,这很可能是<h:form>。所以给它一个固定的ID,例如

<h:form id="form"> 
    ... 

这样的j_idt33:summary将成为form:summary

+0

并得到一个ID的元素我必须得到它与完整的生成ID,而不是它的ID,对不对? –

+3

在JavaScript中,你的意思是?当然。 JavaScript所能够访问的所有内容都是HTML DOM树,而不是JSF组件树。 JavaScript在webbrowser中运行,而不是在webserver中运行。 JSF运行在web服务器上并生成HTML。 – BalusC