我的带有延迟数据模型的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是数据库中的全部数据计数。
我不明白“第一”成长的方式,我的错误在哪里?
答案 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();
}