我陷入困境.我希望我能在这里找到解决方案.我正在使用分页来显示用户个人资料页面上的一些数据.
使用基本分页执行此操作:
public Page list(Query query, int pageNo, int perPage) {
int totalResults = query.list().size();
int firstResult = (pageNo - 1) * perPage;
query.setFirstResult(firstResult);
query.setMaxResults(perPage);
List resultList = query.list();
return new Page(resultList, perPage, pageNo, totalResults);
}
页面类构造函数:
public Page(List resultList, int pageSize, int page, int totalResults) {
this.resultList = resultList;
this.pageSize = pageSize;
this.page = page;
this.totalResults = totalResults;
this.totalPages = (totalResults - 1) / pageSize + 1;
}
现在,如果结果在哪里正常显示而没有任何删除,这将是正常的.但是用户可以从他的动作列表中删除项目.
让我们有这种情况.假设有totalResults – 17,perPage – 6和totalPages – 3.
现在在第一页中他删除了2个项目,总共有15个结果,而第2页面中的行ID已经转移到9而不是7(因为两个项目没有,总结果现在是15).
我希望情况很清楚.现在不需要这种中间换档.
我正在考虑将其作为remainingItems实现,但我再次对此感到困惑.剩余项目将始终取决于pageNo和perPage,并且与totalResult无关(因为总结果在两者之间减少).我也不能在这里使用最后n行,因为行计数将再次减少移动我想要的结果.
我也不想在方法中保留太多参数.例如 – 假设我在参数中传递toSatrtWith id并从中获取perPage行数,我可能得到所需的东西.但我想要一个更优雅的解决方案.