2011-11-26 32 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