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

时间:2016-09-10 07:36:50

标签: primefaces filter 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。

1 个答案:

答案 0 :(得分:0)

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

就像在使用分页时使用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>

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