2

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.

1
  • is UserDataList and your managedBean serializable ? Commented May 13, 2013 at 8:19

1 Answer 1

8

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):

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.