Когда использовать: (двоеточие) при рендеринге в компонентах 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 родитель.

Читайте также: