p:数据表的惰性分页:单击分页后,“第一个”等于页面大小

时间:2019-09-30 15:01:38

标签: jsf primefaces

我的带有延迟数据模型的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是数据库中的全部数据计数。

我不明白“第一”成长的方式,我的错误在哪里?

1 个答案:

答案 0 :(得分:0)

阅读后 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();
}