2013-05-13 2 views
2

Я думаю, что мой код Java правильный, но записи не отображаются в dataTable.JSF2 + Primefaces: DataTable проблема с ленивой загрузкой

Пожалуйста, проверьте ниже код. Я не знаю, где я ошибся.

.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 метод возвращает правильное значение, я его отлаживаю. я думаю проблема в пользовательDataList.

+0

является UserDataList и ваш managedBean сериализации? –

ответ

8

Ваша реализация LazyDataModel не устанавливает rowCount. Вы должны сделать что-то вроде:

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(...); 
} 

Обратите внимание, что rowCount является поданым с числом строк перед тем пагинацией но после фильтрации.

См this answer, содержащий рабочий пример (с той лишь разницей, что он использует JPA Criteria API вместо Hibernate Criteria):

+0

Спасибо за этот пост, setrowCount() решил мою проблему. –

Смежные вопросы