我在素面数据表上实现了延迟加载。它工作正常,但是当页面更改时,选择会被清除。如何在页面更改时保留其他页面的选择并返回页面。 我在这里发现了一个相关问题。
这个答案帮助我保留选定的对象,但在返回页面时未能保留表格中的复选框。
使用 Prime Faces 版本 6.2
由于 OP 不想升级到 6.2 以上,因此解决方案是此处列出的解决方法: https://forum.primefaces.org/viewtopic.php?f=3&t=47224
添加 AJAX
toggleSelect
事件
<p:ajax event="toggleSelect"
global="false"
immediate="true"
update=":usersManagerForm:usersTable:usersActions"
listener="#{usersManagerBean.onToggleSelect}" />
以及支持bean方法:
public void onToggleSelect(ToggleSelectEvent event) {
List<Compte> comptesListOfCurrentPage = (List<Compte>) compteLazyDataModel.getWrappedData();
if(event.isSelected()) {
selectedComptesList.addAll(comptesListOfCurrentPage);
} else {
selectedComptesList.removeAll(comptesListOfCurrentPage);
}
}
我在 2 个答案的帮助下找到了解决方案
.xhtml
<p:dataTable selection="#{myBean.selectedRows}" ... >
<p:ajax event="rowSelectCheckbox" process="@this" listener="#{myBean.onSelectRow}" />
<p:ajax event="rowUnselectCheckbox" process="@this" listener="#{myBean.onUnselectRow}" />
<p:ajax event="page" process="@this" listener="#{myBean.onPagination}" />
<p:ajax event="toggleSelect" process="@this" listener="#{myBean.onToggle}" />
<p:column selectionMode="multiple" ... />
...
</p:dataTable>
.java
private List<MyRowClass> selectedRows;
private List<MyRowClass> selectedRowsSaved;
...
public void onSelectRow(SelectEvent event){
selectedRowsSaved.add((MyRowClass) event.getObject());
}
public void onUnselectRow(UnselectEvent event){
selectedRowsSaved.remove((MyRowClass) event.getObject());
}
public void onToggle(ToggleSelectEvent event){
List<Object> completeListOfCurrentPage = (List<Object>) compteLazyDataModel.getWrappedData();
if(event.isSelected()) {
selectedRowsSaved.addAll(comptesListOfCurrentPage);
} else {
selectedRowsSaved.removeAll(comptesListOfCurrentPage);
}
}
public void onPagination(){
if(selectedRowsSaved!=null && selectedRowsSaved.isEmpty()}{
selectedRows.addAll(selectedRowsSaved);
}
}
public List<MyRowClass> getSelectedRows(){
return selectedRowsSaved;
}
public void setSelectedRows(List<MyRowClass> selectedRows){
this.selectedRows = selectedRows;
}
有这方面的消息吗?我仍然无法让这个工作,我正在使用 primefaces 10