如何在更新PrimeFaces dataTable时保持过滤器和当前页面



我有一个数据表,它有分页器和过滤器。当表被过滤而不是在第一页,并且我试图删除一行时,我希望同时保留过滤器和当前页。所以我尝试这样做:

  try {
            List<Vector> filteredData = incomeTable.getFilteredValue();
            Map<String, Object> filterValue = incomeTable.getFilters();
            if (filteredData == null) {
                filteredData = lstData;
            }
            int index = filteredData.indexOf(selectedRow);
            lstData.remove(selectedRow);
            filteredData.remove(selectedRow);
            if (filteredData.size() > index) {
                selectedRow = filteredData.get(index);
            } else {
                selectedRow = filteredData.get(index - 1);
            }
            onRowSelect();
            incomeTable.setFilteredValue(filteredData);
            incomeTable.setFilters(filterValue);
            incomeTable.setFirst(getFirstRecordShow(filteredData));
        } catch (Exception e) {
            reportException(e);
        }

处理完这个函数后,我更新了客户端的表:

update="@([id$=incomeTable])"

我能够保留当前页面,过滤数据列表并正确显示所选行。但是我在标题行上使用的过滤器被清除了。我已经试过了

incomeTable.setFilters(filterValue); 

重新设置值,但仍然不工作。

有没有人知道在这种情况下如何保持过滤器和当前页面?

我的PrimeFaces版本是5.3

经过一些测试后,结果变得相当简单。

就像在使用分页时切换列可见一样(使用boolean[]),创建一个String[]来保存所有的过滤器值

private String[] colVisible = new String[] {"", "", "", "", ...};

为每一列添加filterValue属性:

<p:column headerText="Header text"
    filterBy="#{item[1]}" filterMatchMode="contains"
    visible="#{bean.colVisible[1]}"
    filterValue="#{bean.filterValue[1]}">
    <h:outputText value="#{item[1]}" />
</p:column>

这样,即使在更新之后,过滤器值也将保持不变。然后当我需要清除过滤器时,我只需要将它们重置为空白。

最新更新