java - Primefaces数据表延迟加载分页行数显示错误

标签 java hibernate jsf-2 primefaces pagination

我正在尝试为 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。请参阅随附的屏幕截图。 enter image description here

Lazymodel rowCount 设置为

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

它的实现

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

我怎样才能实现这个目标?

最佳答案

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

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

关于java - Primefaces数据表延迟加载分页行数显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13965336/

相关文章:

java - 如何以编程方式在 Android 上的蓝牙音频设备之间切换音频

java - 如何使用 Firebase 查询 equalTo(value, key)?

java - Hibernate - 自动@ManyToMany 更新

java - 自定义容器登录页面

jsf - 通过复合组件传递 MethodParameter

java - 如何使用Primefaces在Java中查找数据源(dataTable)?

java - 无法合并两个 mp3 文件

java - 读取文件(>150MB)并将文件内容作为 ByteArrayOutputStream 返回

java - Hibernate 命名策略更改表名

spring - JSP 中 List 中的 ${employee.id} 抛出 java.lang.NumberFormatException : For input string: "id"