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
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;
}