我有一个包含主面筛选功能的数据表。一些操作可以在表上完成(例如编辑)。在使用ajax完成用户操作后,将更新数据。它直接更新表,工作良好,如果我不过滤数据表,不幸的是,如果我使用它和编辑它。
这就是我的datatable的样子:
<p:dataTable id="dataTable" var="row"
value="#{bean.value}"
filteredValue="#{bean.filteredValue}"
paginator="true" rows="25" paginatorPosition="bottom"
rowKey="${row.id}"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
editable="true">
和触发更新的按钮
<p:commandButton value="Save"
actionListener="#{bean.save}"
update=":form"/>
更新数据表后,您必须调用它的客户端filter()
方法。
<p:dataTable widgetVar="dataTableWidgetVar" id="dataTable" var="row"
value="#{bean.value}"
filteredValue="#{bean.filteredValue}"
paginator="true" rows="25" paginatorPosition="bottom"
rowKey="${row.id}"
editable="true">
<p:commandButton value="Save"
actionListener="#{bean.save}"
update=":form"
oncomplete="PF('dataTableWidgetVar').filter()"/>
对于5之前的PrimeFaces版本,您应该使用
<p:commandButton value="Save"
actionListener="#{bean.save}"
update=":form"
oncomplete="dataTableWidgetVar.filter()"/>
添加Primefaces 5的答案。X,因为他们改变了调用widget var的方式:
几乎和Kerem Baydogan的回答一样,但有一点修改:
<p:commandButton value="Save"
actionListener="#{bean.save}"
update="@form"
oncomplete="PF('dataTableWidgetVar').filter()"/>
或者您可以使用:
清除所有过滤器<p:commandButton value="Save"
actionListener="#{bean.save}"
update="@form"
oncomplete="PF('dataTableWidgetVar').clearFilters()"/>
对于大于或等于5的质面版本,您可以使用这段代码,它工作得很好
<p:dataTable var="page" value="#{yourBean.allData}" widgetVar="yourWidgetVarName"/>
<p:commandButton value="delete"
actionListener="#{yourBean.delete}"
update="@form"
oncomplete="PF('yourWidgetVarName').filter()"/>
如果您正在使用版本5的primefaces,只需创建表示单个数据行的数据类,以实现Serializable