31

我有一个数据表,其中包括 primefaces 的过滤器功能。可以对表格进行一些操作(例如编辑)。用户使用 ajax 操作完成后数据表会更新。如果我不过滤数据表,它会直接更新表格并且效果很好,不幸的是,如果我使用它并对其进行编辑,则不会。

这就是我的数据表的样子:

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

以及触发更新的 Button

<p:commandButton value="Save"
                        actionListener="#{bean.save}"
                        update=":form"/>
4

4 回答 4

61

更新数据表后,您必须调用它的客户端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()"/>
于 2013-01-15T15:24:31.897 回答
17

为 Primefaces 5.x 添加答案,因为它们改变了调用小部件 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()"/>
于 2015-02-11T14:42:26.743 回答
-2

对于primefaces大于等于5的版本,可以使用这块代码,效果很好

<p:dataTable var="page" value="#{yourBean.allData}" widgetVar="yourWidgetVarName"/>

<p:commandButton value="delete"
                 actionListener="#{yourBean.delete}"
                 update="@form"
                 oncomplete="PF('yourWidgetVarName').filter()"/>
于 2017-04-20T15:37:51.457 回答
-6

如果您使用的是 primefaces 的第 5 版,只需制作表示单个数据行的数据类,以实现 Serializable

于 2015-04-10T10:12:36.490 回答