我有一个包含分页器和过滤器的数据表。当表被过滤而不是在第一页并且我尝试删除一行时,我想保留过滤器和当前页面。所以我试过这样的事情:
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。
答案 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>
这样,即使在更新后,过滤器值也会保持不变。然后当我需要清除过滤器时,我只需要将它们全部重置为空白。