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。请参阅随附的屏幕截图。在此处输入图像描述

Lazymodel 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

在您覆盖的加载方法中,您应该执行过滤逻辑并获得结果,而不是获取它的大小并使用它......

于 2012-12-20T11:50:25.743 回答