簡體   English   中英

JSF2 + Primefaces:DataTable延遲加載問題

[英]JSF2 + Primefaces : DataTable lazy loading issue

我想,我的java代碼是正確的,但記錄沒有顯示在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方法返回一個正確的值,我調試它。 我認為問題出在userDataList中

您的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分頁之前過濾之后的行數。

請參閱此答案,其中包含一個工作示例(唯一的區別是它使用JPA Criteria API而不是Hibernate Criteria):

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM