0

Primefaces データテーブルの遅延読み込みを実装しようとしています。として実装したフィルター条件があります

public List<Request> getRequest(int startingAt, int maxPerPage,
            String sortField, SortOrder sortOrder, Map<String, 
String> filters) {
        Criteria criteria = sessionFactory.getCurrentSession().
            createCriteria(Request.class);          
        for (Map.Entry<String, String> entry : filters.entrySet()) {            
            if(entry.getValue()!=null){             
                criteria.add(Restrictions.ilike("prNo",
                "%"+entry.getValue()+"%"));             
            }
        }
        criteria.setMaxResults(maxPerPage);
        criteria.setFirstResult(startingAt);
        return criteria.list();
    }

そしてjsfページで

<p:column id="prNo" filterBy="#{req.prNo}"   
                headerText="PR No">                 
                <h:outputText value="#{req.prNo}" />
            </p:column>

私が直面している問題は、フィルター処理された行に n データテーブルのページ番号が表示され、実際のレコード数がまったく変更されないことです。たとえば、フィルターが条件に一致し、フィルター条件の行数が 12 の場合、ページネーションは1 of 3として表示され、ページは1 2 3のようになります。添付のスクリーン ショットを参照してください。ここに画像の説明を入力

レイジーモデルのrowCountは次のように設定されています

lazyModel.setRowCount(getRequestService().getRequestCount());

それは実装です

int count = ((Long) sessionFactory.getCurrentSession()
                .createQuery("select count(*) from Request").uniqueResult())
                .intValue();

どうすればこれを達成できますか?

4

1 に答える 1

2

INMO 、使用した方が良いですLazyDataModelショーケースのように拡張します - DataTable - Lazy Loading

オーバーライドされた load メソッド内で、フィルター ロジックを実行し、そのサイズを取得して使用するよりも結果を取得する必要があります...

于 2012-12-20T11:50:25.743 に答える