【问题标题】:Primefaces datatable lazyloading pagination number of rows are wrongly displayedPrimefaces数据表延迟加载分页行数显示错误
【发布时间】:2012-12-07 13:40:21
【问题描述】:

我正在尝试为 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();

我怎样才能做到这一点?

【问题讨论】:

  • 当你过滤你的数据时,确保setRowCount将被设置为过滤数据的大小,比如lazyModel.setRowCount(criteria.list().size());
  • @Daniel 如果我不使用 DataModel 进行 LazyLoading,在 managedbean 中获取 criteria.list().size() 的最佳方法是什么?不使用 DataModel 进行 LazyLoading 并直接在 managedbean 中覆盖加载方法是一个好主意吗?
  • INMO ,你最​​好使用 LazyDataModel (就像在展示中一样扩展它),在你覆盖的 load 方法中,你应该执行过滤逻辑并得到结果,而不是获取它的大小和使用它...
  • @Daniel 感谢您的建议。我试图实现 LazyDataModel 并且由于某种原因我得到了空指针异常。我为此stackoverflow.com/questions/13967915/… 创建了一个新帖子
  • @Daniel 如果您发布答案,我将非常乐意接受。

标签: java hibernate jsf-2 primefaces pagination


【解决方案1】:

INMO,你最好用LazyDataModel (extend it just like in the showcase - DataTable - Lazy Loading)

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

【讨论】:

    猜你喜欢
    • 2012-04-28
    • 1970-01-01
    • 2013-05-26
    • 2013-01-09
    • 2013-06-17
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    相关资源
    最近更新 更多