何时使用:(冒号)在jsf组件中进行渲染

时间:2013-09-20 02:00:17

标签: jsf-2 primefaces

我已经读过,我们应该使用:(冒号)以其他形式呈现组件。但就我而言

<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>

我想从datatable组件更新消息(growl)为什么我必须使用冒号更新=“:form:messages”

1 个答案:

答案 0 :(得分:9)

相对于实现the NamingContainer interface的父组件,搜索所有相对客户端ID(不以:开头)。正如您在链接的javadoc中看到的那样,至少是所有UIFormUIData组件。 <h:form>就是这样的。 <p:dataTable>是另一个。

在您的特定情况下,<p:ajax>包含在<p:dataTable>中。因此,<p:ajax update="messages">会在messages的上下文中查找ID为<p:dataTable>的子组件。但是,由于没有,它将找不到任何东西。实际上,您需要使用绝对客户端ID,因为它不在当前NamingContainer父级的上下文中。

另见: