【问题标题】:p:datatable lazy pagination: after click on paging "first" became equals to page sizep:datatable 惰性分页:点击分页后“first”变为等于页面大小
【发布时间】:2019-09-30 15:01:38
【问题描述】:

我的带有惰性数据模型的 JSF bean

private Integer pageSize = 15;

private Integer first = 0;


@PostConstruct
public void init() {
    responseDataList = new ResponseDataList();
    responseDataList.setPageSize(pageSize);      
}

public class ResponseDataList extends LazyDataModel<User> {

    public int total = 0;
    public int dataSize = 0;

    @Override
    public List<User> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
        List<User> data = new ArrayList<>();
        try {


            total = userRestClient.getTotalCount().intValue();


            int count = (first + pageSize);
           data = userRestClient.findAllUsers(first, count).getUserList();

            dataSize = data.size();


        } catch (Exception es) {

        }
        return data;
    }

    @Override
    public User getRowData(String rowKey) {
        return null;
    }

    @Override
    public Object getRowKey(User object) {
        return object.getId();
    }

    @Override
    public int getRowCount() {
        return (int) total;
    }
}

我的数据表:

        <p:dataTable var="list" id="userTbl"
                             value="#{usersBean.responseDataList}"
                             paginator="true" rows="#{usersBean.pageSize}" first="#{usersBean.first}"  reflow="true" 
                             paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} 
                             {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}" 
                             lazy="true"  rowsPerPageTemplate="5,10,15"
                             >                                    

当我第一次点击分页时“第一次”为零,第二次为15。分页崩溃的原因是什么。 total 是数据库中的全部数据计数。

我不明白“第一”是如何成长的,我的错误在哪里?

【问题讨论】:

  • 没有错。 first 是您在数据库中应该开始搜索的值(用于“限制”)。如果您要转到第 3 页,在您的情况下应该是 30 和 45 和 60 等。什么是“崩溃”?你的 PF 版本是多少?
  • 我的primefaces版本是7
  • 我认为偏移量计算错误,对于第二页后端接收开始:30,这意味着它是找到不存在的第30页
  • 点击第二页后后台接收开始为15,但我只有13页...

标签: jsf primefaces


【解决方案1】:

看完之后 JSF Primefaces Pagination with Backend 我发现 PrimeFaces 传递了第一条记录的编号,而我怀疑它是我们服务中使用的开始页面。因此,首先将 PrimeFaces 除以页面大小,然后将结果传递给我们的方法,如下面的代码所示。

if (first == 0) {
    data = userRestClient.findAllUsers(first, pageSize).getUserList();
} else {
    first = first / pageSize;
    data = userRestClient.findAllUsers(first, pageSize).getUserList();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-01
    • 2016-06-15
    • 1970-01-01
    • 2015-08-05
    • 2014-08-21
    • 2023-02-02
    • 2014-12-18
    相关资源
    最近更新 更多