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

原创
2016/03/30 15:42
阅读数 607

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

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

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

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

     

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

  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过大导致空数据,非常不友好
      }
展开阅读全文
打赏
2
0 收藏
分享
加载中
littleant博主

引用来自“JFinal”的评论

当请求页号大于总号数量,如果总是返回最后一页的结果,在逻辑上不严谨,所以会出现一些后遗症。可以测试一下oschina对此问题的处理方式,这里是一最后一页的某个链接:http://www.oschina.net/question/tag/jfinal?catalog=$catalog&show=&p=90,手动将后面的参数p=90改成 p=91或者 p=0都不会显示任何数据,oschina在有些地方对于此类问是直接重定向到一个新的url
好的,波总,那位网友测试的太仔细了,之前一直没注意到这个问题
2016/04/01 09:21
回复
举报
当请求页号大于总号数量,如果总是返回最后一页的结果,在逻辑上不严谨,所以会出现一些后遗症。可以测试一下oschina对此问题的处理方式,这里是一最后一页的某个链接:http://www.oschina.net/question/tag/jfinal?catalog=$catalog&show=&p=90,手动将后面的参数p=90改成 p=91或者 p=0都不会显示任何数据,oschina在有些地方对于此类问是直接重定向到一个新的url
2016/03/31 22:30
回复
举报
当请求页号大于总号数量,如果总是返回最后一页的结果,在逻辑上不严谨,所以会出现一些后遗症。可以测试一下oschina对此问题的处理方式,这里是一最后一页的某个链接:http://www.oschina.net/question/tag/jfinal?catalog=$catalog&show=&p=90,手动将后面的参数p=90秘诀成 p=90或者 p=0都不会显示任何数据,oschina在有些地方对于此类问是直接重定向到一个新的url
2016/03/31 22:29
回复
举报
更多评论
打赏
3 评论
0 收藏
2
分享
返回顶部
顶部