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

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

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

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

    JFinal教程JfinalUIB 代码笔记 (9)--- JFinal分页存在的问题_第1张图片

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

     

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

    JFinal教程JfinalUIB 代码笔记 (9)--- JFinal分页存在的问题_第2张图片

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

  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过大导致空数据,非常不友好
      }

你可能感兴趣的:(JFinal教程JfinalUIB 代码笔记 (9)--- JFinal分页存在的问题)