更新PrimeFaces数据表时如何保持筛选器和当前页面
我有一个带有分页器和过滤器的数据表。当表格被筛选,而不是在第一页,并且我尝试删除一行时,我希望保留筛选器和当前页。所以我试过这样的方法:更新PrimeFaces数据表时如何保持筛选器和当前页面,primefaces,filter,datatable,Primefaces,Filter,Datatable,我有一个带有分页器和过滤器的数据表。当表格被筛选,而不是在第一页,并且我尝试删除一行时,我希望保留筛选器和当前页。所以我试过这样的方法: try { List<Vector> filteredData = incomeTable.getFilteredValue(); Map<String, Object> filterValue = incomeTable.getFilters(); if (f
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);
}
我能够保留当前页面、过滤数据列表并正确显示所选行。但是我在标题行上使用的过滤器被清除了。我已经试过了
incomeTable.setFilters(filterValue);
重新设置该值,但仍不起作用
在这种情况下,有人知道如何同时保留筛选器和当前页面吗
我的PrimeFaces版本是5.3。经过一些测试,结果非常简单 就像在使用分页时切换可见列一样(使用布尔值[]),创建一个字符串[],它将保存所有筛选器值
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>
这样,即使在更新之后,过滤器值也将保持不变。然后,当我需要清除过滤器时,我只需要将它们全部重置为空白。@Jasper de Vries:在这种情况下,你没有阅读我所有的要求吗?我想保留当前页面,所以clearFilters或filter都不可接受,因为它们会将paginator移回第一页。OK。我改进了你的问题。我稍后会看一看,为什么不干脆不更新datatable,直接使用ajax调用删除行服务器端,并在ajax调用完成后使用一些简单的jquery将其从客户端删除呢?不需要过滤什么的。唯一的缺点是页面现在包含“rows-1”行。@Kukeltje:如何删除客户端的行?PF(“incomeTable”)除了removeSelection之外没有任何remove函数。另外,如果我试图通过删除整个元素将其从视图中删除,我的表的索引列将不会得到更新,因此会有一个缺少的索引,对吗?缺少的索引会导致问题吗?很酷,很好的解决方案。出于好奇,您是否尝试使用6.0来实现此功能?如果我没记错的话,在5.3和6.0之间,在这方面有些事情发生了变化。小挑剔:colVisible不应该是filterValue(和privagte private;-)@Kukeltje:我还没有尝试过6.0,因为我们的PM在我们完成开发阶段之前不允许我们升级,但可能在维护这个网站时。关于colVisible,它用于显示或隐藏列。将p:ColumntToggler与paginator一起使用时,如果更改页面,primeface表将保留您选择显示的列标题的数量,但每行将显示所有列。因此,它使标题和行值不匹配。
<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>