【发布时间】:2016-09-10 07:36:49
【问题描述】:
我有一个包含分页器和过滤器的数据表。当表格被过滤而不是在第一页并且我尝试删除一行时,我想保留过滤器和当前页面。所以我尝试了这样的事情:
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。
【问题讨论】:
-
@Jasper de Vries:在这种情况下,您没有阅读我的所有要求吗?我想保留当前页面,所以 clearFilters 或 filter 都不可接受,因为它们会将分页器移回第一页。
-
好的。我改进了你的问题。我稍后再看看。
-
为什么不干脆不更新数据表,只使用 ajax 调用来删除行服务器端,并在 ajax 调用完成时使用一些简单的 jquery 来删除客户端?无需过滤或其他任何东西。唯一的小缺点是页面现在包含“rows-1”行。
-
@Kukeltje:如何在客户端删除行? PF('incomeTable') 除了 removeSelection 之外没有任何删除功能。此外,如果我尝试通过删除整个
元素将其从视图中删除,我的表的索引列将不会得到更新,所以会有一个缺失的索引对吗? -
“缺失”索引是否会导致问题?
标签: primefaces filter datatable