Reputation: 33
I implemented lazy loading at prime faces data table. It is working fine but when page is changed the selection is cleared. How to retain the selection at some other pages when page is changed and return back to the page. I found one related question here.
This answer helped me to keep the selected objects but failed to keep check boxes at table when come back to the page.
using Prime Faces version 6.2
Upvotes: 2
Views: 1096
Reputation: 33
I got the solution with the help of 2 answers
.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;
}
Upvotes: 1
Reputation: 12019
Since OP doesn't want to upgrade above 6.2 the solution is a workaround listed here: https://forum.primefaces.org/viewtopic.php?f=3&t=47224
Add an AJAX toggleSelect
event
<p:ajax event="toggleSelect"
global="false"
immediate="true"
update=":usersManagerForm:usersTable:usersActions"
listener="#{usersManagerBean.onToggleSelect}" />
And backing bean method:
public void onToggleSelect(ToggleSelectEvent event) {
List<Compte> comptesListOfCurrentPage = (List<Compte>) compteLazyDataModel.getWrappedData();
if(event.isSelected()) {
selectedComptesList.addAll(comptesListOfCurrentPage);
} else {
selectedComptesList.removeAll(comptesListOfCurrentPage);
}
}
Upvotes: 1