Когда использовать: (двоеточие) при рендеринге в компонентах jsf
Я читал, что мы должны использовать :(двоеточие) для отображения компонентов в другой форме. но в моем случае
<h:form id="form">
<p:growl id="messages"></p:growl>
<p:dataTable var="e" value="#{employees.eList}" id="elist1"
editable="true">
<f:facet name="header">
In-Cell Editing
</f:facet>
<p:ajax event="rowEdit" listener="#{employees.onEdit}" update=":form:messages"/>
<p:ajax event="rowEditCancel" listener="#{employees.onCancel}" />
<p:column headerText="name" style="width:30%">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{e.name}" />
</f:facet>
<f:facet name="input">
<h:inputText value="#{e.name}" style="width:100%" />
</f:facet>
</p:cellEditor>
</p:column>
.......... ...........
</p:datatable>
Я хочу обновить сообщения (growl) из компонента datatable, почему я должен использовать colon update=":form:messages"
1 ответов
все относительные идентификаторы клиентов (те, которые не начинаются с :
) ищутся относительно родительского компонента, который реализует the NamingContainer
интерфейс. Как вы можете видеть в связанном javadoc, это, по крайней мере, все UIForm
и UIData
компоненты. The <h:form>
такой один. The <p:dataTable>
еще один.
в вашем конкретном случае <p:ajax>
, заключенный в <p:dataTable>
. Итак,<p:ajax update="messages">
будет искать дочерний компонент с ID messages
в контексте <p:dataTable>
. Однако, поскольку их нет, он ничего не найдет. На самом деле вам нужно использовать абсолютный идентификатор клиента, потому что он находится вне контекста текущего NamingContainer
родитель.