JSF2 + Primefaces : DataTable lazy loading issue
10,912
Your LazyDataModel
implementation is not setting rowCount. You should do something like:
public void init(){
// +getter , setter
userDataList = new LazyDataModel<UserDetail>(){
private static final long serialVersionUID = 1L;
@Override
public List<UserDetail> load(int first, int pageSize, String sortField,
SortOrder sortOrder, Map<String, String> filters) {
userDataList.setRowCount(...);
return lazyDataModelCom.getResultList(first, pageSize, sortField, sortOrder, filters);
}
};
userDataList.setRowCount(...);
}
Pay attention that rowCount
is feeded with the number of rows before pagination but after filtering.
See this answer containing a working example (with the only difference that it uses JPA Criteria API instead of Hibernate Criteria):
Author by
Jimit Tank
Updated on June 14, 2022Comments
-
Jimit Tank almost 2 years
I guess, my java code is proper, but records are not showing on dataTable.
Please check below code. i dont know where i made mistake.
.xhtml
<p:dataTable value="#{userDetailList.userDataList}" var="user" rows="5" paginator="true" lazy="true" paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"> <p:column headerText="No"> <h:outputText value="#{user.id}"></h:outputText> </p:column> <p:column headerText="User Name"> <h:outputText value="#{user.userName}"></h:outputText> </p:column> </p:dataTable>
.java
@PostConstruct public void init(){ // +getter , setter userDataList = new LazyDataModel<UserDetail>(){ private static final long serialVersionUID = 1L; @Override public List<UserDetail> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) { return lazyDataModelCom.getResultList(first, pageSize, sortField, sortOrder, filters); } }; }
getResultList
public List<UserDetail> getResultList(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) { Session session = HibernateUtils.getsession(); Criteria criteria = session.createCriteria(UserDetail.class); criteria.addOrder(Order.asc("id")); for (Map.Entry<String, String> entry : filters.entrySet()) { if (entry.getValue() != null) { criteria.add(Restrictions.ilike("id", "%" + entry.getValue() + "%")); } } criteria.setMaxResults(pageSize); criteria.setFirstResult(first); return criteria.list(); }
getResultList method return a proper value, i debug it. i think problem is in userDataList.