Did anybody face with such issue that when you use lazy loading in datatable the data isn't populated from the first time (all of them are empty) but after you just refresh the page data appears as it should.
This appears in RC2, in RC1 everything is perfect.
Below I put my code
Code: Select all
<p:dataTable
id="table"
style="margin-bottom:30px"
value="#{bean.lazyModel}"
var="bean"
lazy="true"
dynamic="true"
selectionMode="single"
selection="#{{bean.selectedItem}"
paginator="true"
rows="10"
paginatorPosition="bottom"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15"
rowSelectListener="#{tenantBean.onRowSelect}"
Code: Select all
public LazyDataModel<T> getLazyModel() {
if (lazyModel == null) {
lazyModel = createTableLazyModel();
}
lazyModel.setRowCount(editedItems.size() + pagingResultsCount);
return lazyModel;
}
protected LazyDataModel<T> createTableLazyModel(){
return new LazyDataModel<T>() {
@Override
public List<T> load(int first, int pageSize,
String sortField, boolean sortOrder, Map<String, String> filters) {
tablePageSize = pageSize;
if (sortField == null) {
sortField = getDefaultSortProperty();
}
pagingResults = doFetchPagingResults(first, pageSize, sortField, sortOrder, filters);
List<T> allItems = pagingResults.getRecords();
pagingResultsCount = pagingResults.getTotal();
List<T> itemsToReturn = new ArrayList<T>();
if (!editedItems.isEmpty()) {
itemsToReturn.addAll(editedItems);
itemsToReturn.addAll(allItems);
int lastIndex = pageSize;
if (lastIndex > itemsToReturn.size()){
lastIndex = itemsToReturn.size();
}
itemsToReturn = itemsToReturn.subList(0,
lastIndex);
} else {
itemsToReturn.addAll(allItems);
}
setRowCount(pagingResultsCount + editedItems.size());
currentItems = itemsToReturn;
return itemsToReturn;
}
};
}
Thanks