分页方法页数超出时返回的空list
@JFinal 你好,想跟你请教个问题:
在class DbPro中有如下分页代码,
if (pageNumber > totalPage)
return new Page<Record>(new ArrayList<Record>(0), pageNumber, pageSize, totalPage, (int)totalRow);
此种情况,有数据,select count(*)
,totalRow大于1,但是因为pageNumber> totalPage
而返回了空list
导致页面查询出来是空白列表
是我版本低了还是现在这个问题没有解决呢?
说一下我的操作:
1.先不带条件条件查询,有10页,点到第4页,此时前端分页参数是4
2.填入条件,此条件能查出2条数据,预计效果是返回2条数据,总页数变为1
3.点击搜索(相当于带了PageNumber=4,以及搜索条件),预计效果是返回2条数据的1页
4.返回结果是空
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
在这里继续回复方便点,hibernate 分页其实也不会自动决定空白页返回数据的,它是这么做的:
setFirstResult 设置返回的偏移量,而setMaxResults 设置每页的记录条数,当这个偏移量超出了最后一条记录,那么是不会返回任何数据的。
归根到底是做为框架的 jfinal或者 hibernate 无法非常确切地符合逻辑地决定在没有数据时该返回什么数据,这个决定最多可以当成是业务需求。
看源代码,select count(*) 方法完全统计出了实际上有2条的,pageNumber如果超出,则让它等于1不好吗?明明有数据,只是因为页码超出了,就返回空白显得莫名其妙啊
在前端生成翻页链接时是没有问题的,按我的上面操作步骤,此种情况再正常不过了,翻了很多页,发现还没找到数据,就填入一个条件,页码可不就是当前的超出页码吗?不是手工填入的
回复
逻辑的严谨性对于程序来说非常重要,总页数为 n,如果去获取 m > n 的那页,这个在逻辑上就是不存在的页不建议框架自主去做选择,否则终将会出很多意想不到的问题
回复
不同条件所得到的分页结果本身就会产生不同的页号,原来翻页用的url链接是针对上一个条件的,在新条件下已经不适用了
回复
作为用户,我说一下感受,这个是被测试作为bug提出来的,我找了好久才发现是源码不支持这个自动写法,首先不符合习惯,要花时间去跟踪这个现象。貌似hibernate对这种情况处理比较友好
填入条件,总页数变为了 1 ,那么只有第一页才有数据。当 pageNumber=4 时,第 4 页是断不能有数据的,因为总页数才为 1 , 现在非要得到第四页的数,必定就是空白页。
更好的做法是,在前端生成翻页链接时控制 pageNumber <= 总页数
我再补充一个具体的例子,在 oschina.net 这个网站上某个用户的动弹共有 73 页,点击这个链接可查看:http://my.oschina.net/u/257950?ft=&scope=3&showme=0&p=73 , 当你请求第 74 页的时候是没有数据的,点击这个改过页号的链接可以验证一下:http://my.oschina.net/u/257950?ft=&scope=3&showme=0&p=74 。
oschina的问答区也可以验证一下,当某页没有数据时,网站会将请求重定向到另一个url,这个重定向的操作是业务解决方案,而不是框架做的。
有时候,我们长期觉得理所当然的事情可能是不符合严谨的逻辑的。