分页方法页数超出时返回的空list

发布于 2021-12-02 07:20:18 字数 723 浏览 790 评论 8

@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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

尐偏执 2021-12-02 08:00:27

    在这里继续回复方便点,hibernate 分页其实也不会自动决定空白页返回数据的,它是这么做的:

Query query = session.createQuery("select * from news");  
query.setFirstResult(offset);
query.setMaxResults(pageSize);
List result = query.list();

   setFirstResult 设置返回的偏移量,而setMaxResults 设置每页的记录条数,当这个偏移量超出了最后一条记录,那么是不会返回任何数据的。

  归根到底是做为框架的 jfinal或者 hibernate 无法非常确切地符合逻辑地决定在没有数据时该返回什么数据,这个决定最多可以当成是业务需求。

残花月 2021-12-02 08:00:22

看源代码,select count(*) 方法完全统计出了实际上有2条的,pageNumber如果超出,则让它等于1不好吗?明明有数据,只是因为页码超出了,就返回空白显得莫名其妙啊

泛泛之交 2021-12-02 07:59:57

在前端生成翻页链接时是没有问题的,按我的上面操作步骤,此种情况再正常不过了,翻了很多页,发现还没找到数据,就填入一个条件,页码可不就是当前的超出页码吗?不是手工填入的

为你鎻心 2021-12-02 07:59:11

回复
逻辑的严谨性对于程序来说非常重要,总页数为 n,如果去获取 m > n 的那页,这个在逻辑上就是不存在的页不建议框架自主去做选择,否则终将会出很多意想不到的问题

酒几许 2021-12-02 07:59:01

回复
不同条件所得到的分页结果本身就会产生不同的页号,原来翻页用的url链接是针对上一个条件的,在新条件下已经不适用了

鹤舞 2021-12-02 07:57:08

回复
作为用户,我说一下感受,这个是被测试作为bug提出来的,我找了好久才发现是源码不支持这个自动写法,首先不符合习惯,要花时间去跟踪这个现象。貌似hibernate对这种情况处理比较友好

私藏温柔 2021-12-02 07:53:22

   填入条件,总页数变为了 1 ,那么只有第一页才有数据。当 pageNumber=4 时,第 4 页是断不能有数据的,因为总页数才为 1 , 现在非要得到第四页的数,必定就是空白页。

   更好的做法是,在前端生成翻页链接时控制 pageNumber <= 总页数

灵芸 2021-12-02 07:42:22

     我再补充一个具体的例子,在 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,这个重定向的操作是业务解决方案,而不是框架做的。

    有时候,我们长期觉得理所当然的事情可能是不符合严谨的逻辑的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文