我有一个数据包,其中包括primefaces的过滤器功能。某些操作可以在桌面上完成(例如编辑)。使用ajax完成用户操作后,将更新datable。 它直接更新表并且运行良好,如果我不过滤数据表,遗憾的是如果我使用它并编辑它。
这就是我的数据表的样子:
<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"/>
答案 0 :(得分:45)
更新数据表后,您必须调用它的客户端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()"/>
答案 1 :(得分:15)
为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()"/>
答案 2 :(得分:-2)
对于大于或等于5的primefaces版本,你可以使用这段代码,它运作得很好
<p:dataTable var="page" value="#{yourBean.allData}" widgetVar="yourWidgetVarName"/>
<p:commandButton value="delete"
actionListener="#{yourBean.delete}"
update="@form"
oncomplete="PF('yourWidgetVarName').filter()"/>
答案 3 :(得分:-6)
如果您使用的是primefaces的第5版,只需创建表示单个数据行的数据类,即可实现Serializable