过滤后的 Primefaces 数据表排序

Posted

技术标签:

【中文标题】过滤后的 Primefaces 数据表排序【英文标题】:Primefaces datatable sorting after filtering 【发布时间】:2016-04-08 09:18:59 【问题描述】:

我有一个 p:dataTable 存储处理后的表单的结果,我执行以下操作:

    填写表单值。 提交。 数据表已填充 -- 过滤任何列。 更改表单值。 提交。 数据表已填充新结果。 按任意列排序 -- 显示来自 #3 的过滤结果。

我有一个过滤值的数组列表,但我没有在 bean 中对它做任何事情。在提交时,我调用了一个 actionListener,它将 dataTable 转换为 primefaces.components.datatable.DataTable,然后在处理表单之前对其调用 resetValue()(参见下面的代码 sn-p)。

我尝试了多种重置、清除和更新数据表的方法,但我无法解决上述问题。仅供参考,这是我的 p:dataTable 标签:

<p:dataTable
            id="resultsDataTable"
            rendered="#entityReportBean.isResultsPopulated"
            var="change"
            value="#entityReportBean.entityChangeDto"
            styleClass="resultsPanel"
            rows="100"
            paginator="true"
            paginatorPosition="top"
            paginatorTemplate="#PreviousPageLink  Previous  CurrentPageReport  Next  NextPageLink"
            filterEvent="enter"
            filteredValue="#entityReportBean.filteredResults" >

这是actionListener:

    public void onSubmit() 
            FacesContext context = FacesContext.getCurrentInstance();
            DataTable resultsTable = (DataTable) context.getViewRoot().findComponent("results:resultsDataTable");
            resultsTable.resetValue();
                ...

我对 JSF/Primefaces 相当陌生,所以可能有一些我不知道的基本操作。有什么建议吗?

【问题讨论】:

【参考方案1】:

所以我意识到尝试在我的 actionListener 中做任何事情是没有意义的,因为它没有在排序时被调用。所以我在 dataTable 上添加了一个 ajax 'sort' 事件,并向监听器添加了一个resultsTable.updateValue(entityChangeDto);。现在一切都很好。

【讨论】:

以上是关于过滤后的 Primefaces 数据表排序的主要内容,如果未能解决你的问题,请参考以下文章

Primefaces数据表排序和过滤直到rowSelect才起作用

使用o:form进行排序时删除了PrimeFaces数据表过滤includeRequestParams =“true”[重复]

在 primefaces 数据表中排序

Primefaces dataTable过滤日期

没有列过滤器的 primefaces 全局过滤器

关于怎样获取DevExpress GridView过滤后或排序后的数据集问题(转)