Какой сгенерированный префикс j_idt33 в идентификаторе компонента JSF? - PullRequest
2 голосов
/ 26 ноября 2011

Я определяю компонент h: messages следующим образом:

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

, но когда я проверял элемент с помощью firebug, я заметил, что идентификатор переведен в нечто вроде: j_idt33:summary

чтоэтот префикс и почему он генерируется?

1 Ответ

6 голосов
/ 26 ноября 2011

Это идентификатор родительского NamingContainer компонента, например <h:form>, <h:dataTable>, <ui:repeat>, <f:subview>, составного компонента и т. Д.

JSF prependsсгенерированный идентификатор клиента HTML с идентификатором родительского компонента namingcontainer, чтобы избежать конфликтов в идентификаторе клиента HTML, когда компонент повторно используется более одного раза в сгенерированном выводе HTML, например в строке таблицы или во включаемом файле, илисоставной компонент и т. д. Недопустимо иметь несколько элементов HTML с одинаковым идентификатором.

Вы можете отключить автоматически созданный идентификатор, присвоив компоненту NamingContainer фиксированный идентификатор.В вашем конкретном случае это, скорее всего, <h:form>.Так что дайте ему фиксированный идентификатор, например,

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

таким образом j_idt33:summary станет form:summary.

...