JFinal教程JfinalUIB 代码笔记 (9)--- JFinal分页存在的问题

本文分析了JFinal框架中的分页BUG,并提供了一种合理的修复方案。当请求的页码超过总页数时,应返回最后一页而非空数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间有位细心的网友跟我说JFinalUIB中的分页存在bug,我很疑惑,但是问题确实存在,调试一番,发现是JFinal的分页方法本身存在这个问题,下面就bug产生的原因和问题做下记录,给所有JFinal学习使用者一个提示和解决方法

我们以功能查询页面来测试

  1. 点击功能管理,进入功能列表,没有任何查询条件,显示所有数据

    152620_gUXV_99629.jpg

  2. 在查询条件中URL中输入“/jf/wx/keyword/view”,不点击查询按钮,而是选择跳转到第3页,分页参数是查询指定的URL并显示第3页数据

     

    152954_WlOy_99629.jpg

  3. 而数据本身只存在一条,第3页必然是空

    153110_e2xb_99629.jpg

  4. 点击查询按钮,是可以查出来这行数据的

    153441_WZRw_99629.jpg

  5. 作为前端页面,自己只负责数据的展示,是无法处理数据的查询验证的,也许传递的参数存在不合理的地方,但是后端要尽可能的屏蔽此类问题。分析完JFinalUIB自己的分页包装对象SplitPage后,发现问题不在于此,因为SplitPage也是并没有处理数据的查询验证,只是对JFinal的Page参数在外层进行了扩展封装,接着查看JFinal的分页源码,DbPro.java中的doPaginate方法

    如果当前页的页码大于总页数,返回空数据...

  6.  if (pageNumber > totalPage) {
       return new Page<Record>(new ArrayList<Record>(0), pageNumber, pageSize, totalPage, (int)totalRow);
      }

    应该这样来做,当前页的页码大于总页数时,当前页应该显示最大页的数据才合理,在我们这次测试中,也就是应该显示第1页数据,就不会返回空数据了

  7.  if (pageNumber > totalPage) {
       //return new Page<Record>(new ArrayList<Record>(0), pageNumber, pageSize, totalPage, (int)totalRow);
       pageNumber = totalPage; // 修复分页bug,这样会存在pageNumber过大导致空数据,非常不友好
      }

转载于:https://my.oschina.net/dongcb678/blog/649909

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值