我读过,我们应该使用 :(colon) 以其他形式呈现组件。但就我而言
<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>
我想从数据表组件更新消息(咆哮)为什么我必须使用冒号 update=":form:messages"
最佳答案
相对于实现 the :
interface 的父组件搜索所有相关客户端 ID(不以 NamingContainer
开头的那些)。正如您在链接的 javadoc 中看到的那样,至少是所有 UIForm
和 UIData
组件。 <h:form>
就是这样一个。 <p:dataTable>
是另一个。
在您的特定情况下, <p:ajax>
包含在 <p:dataTable>
中。因此, <p:ajax update="messages">
将在 messages
的上下文中查找 ID 为 <p:dataTable>
的子组件。但是,由于没有,它不会找到任何东西。您实际上需要使用绝对客户端 ID,因为它超出了当前 NamingContainer
父级的上下文。
也可以看看:
关于jsf-2 - 何时使用 :(colon) in rendering in jsf components,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18907770/