当前位置:   article > 正文

实现页面分页

页面分页

web项目经常遇到页面分页,在这里总结一下。

先进行 数据分析:需要传给后台当前页面数,每页显示几条数据,数据总数形成的页面总数

           逻辑需求:将数据总数查出来形成页面总数

首先是进行总数的计算,作用就是在前端页面形成 “【1/n】”

  1. <select id="getCount" resultType="long">
  2. select count(*) from 表
  3. </select>

 service中进行逻辑处理,根据数据总数和每页显示条数确定总页数

  1. @Override
  2. public Integer queryTotalPage(Integer rows) {
  3. List<Movie> movieAllList = movieMapper.selectAllMovie();
  4. int total = movieAllList.size(); //这里可以直接调用getCount,一样
  5. //利用total和rows计算总页数totalPage
  6. int totalPage=total%rows==0?(total/rows):((total/rows)+1);
  7. return totalPage;
  8. }

 页面总数确定后,确定起始页以及将查询数据。

由于起始页start和每页显示几页rows不是实体属性,需要使用@Param注解給参数命名

 List<String> pagingMovie(@Param("start")int start,@Param("rows")Integer rows);
  1. <select id="pagingMovie" resultType="com.lyf.filmbase.entity.Movie">
  2. select * from movie limit #{start},#{rows}
  3. </select>

 如果当前是首页(=0),start=0,则上面的数据从0条到rows条查出即可。

  1. public List<String> pagingMovie(Integer currentPage, Integer rows) {
  2. //处理业务逻辑,page变成start,
  3. if(currentPage<=0){
  4. currentPage=1;
  5. }
  6. int start=(currentPage-1)*rows;//最小是0
  7. List<String> movieList=movieMapper.pagingMovie(start,rows);
  8. return movieList;
  9. }

 这里为了将页数信息与实体数据一并传出另写了一个vo类,便于controller调用

  1. public class Page implements Serializable{
  2. private Integer currentPage;
  3. private Integer totalPage;
  4. private List<String> objectList;
  5. public Integer getCurrentPage() {
  6. return currentPage;
  7. }
  8. public void setCurrentPage(Integer currentPage) {
  9. this.currentPage = currentPage;
  10. }
  11. public Integer getTotalPage() {
  12. return totalPage;
  13. }
  14. public void setTotalPage(Integer totalPage) {
  15. this.totalPage = totalPage;
  16. }
  17. public List<String> getObjectList() {
  18. return objectList;
  19. }
  20. public void setObjectList(List<String> objectList) {
  21. this.objectList = objectList;
  22. }
  23. }

 controller中进行封装。

  1. @RequestMapping("moviePage")
  2. public String queryProducts(Integer currentPage,Integer rows,HttpSession session){
  3. List<String> movieList=filmBiz.pagingMovie(currentPage, rows);
  4. Integer totalPage=filmBiz.queryTotalPage(rows);
  5. Page page=new Page();
  6. page.setObjectList(movieList);
  7. page.setCurrentPage(currentPage);
  8. page.setTotalPage(totalPage);
  9. session.setAttribute("page", page);
  10. return "film/movieList";
  11. }

 前端接收并在访问时附上当前页数信息,即可查出 对应范围内的数据实现分页效果。

  1. <!-- 分页 -->
  2. <div class="pager">
  3. <span><strong>【${page.currentPage}/${page.totalPage}】</strong></span>
  4. <!-- 第一页情形 -->
  5. <c:if test="${page.currentPage eq 1}">
  6. <a href="film/moviePage.do?currentPage=2&rows=10"><strong>下一页&nbsp;&nbsp;&nbsp;</strong></a>
  7. <a href="film/moviePage.do?currentPage=${page.totalPage}&rows=10"><strong>&nbsp;&nbsp;&nbsp;尾页</strong></a>
  8. </c:if>
  9. <!-- 非第一页也非最后一页-->
  10. <c:if test="${page.currentPage>1 and page.currentPage<page.totalPage}">
  11. <a href="film/moviePage.do?currentPage=1&rows=10"><strong>&nbsp;&nbsp;&nbsp;首页</strong></a>
  12. <a href="film/moviePage.do?currentPage=${page.currentPage-1}&rows=10"><strong>上一页</strong></a>
  13. <a href="film/moviePage.do?currentPage=${page.currentPage+1 }&rows=10"><strong>下一页</strong></a>
  14. <a href="film/moviePage.do?currentPage=${page.totalPage}&rows=10"><strong>&nbsp;&nbsp;&nbsp;尾页</strong></a>
  15. </c:if>
  16. <!-- 最后一页情形 -->
  17. <c:if test="${page.currentPage==page.totalPage}">
  18. <a href="film/moviePage.do?currentPage=1&rows=10">首页</a>
  19. <a href="film/moviePage.do?currentPage=${page.currentPage-1}&rows=10">上一页</a>
  20. </c:if>
  21. </div>
  22. <!-- 分页结束 -->
  23. <c:if test="${requestScope.size<=0}">
  24. 没有符合条件的数据,请更换查询条件
  25. </c:if>

    PS: 记得在刚开始进入页面时的url中附上起始页数信息。

          如果页面翻页时(如评论页面)避免分页位置变化可以使用ajax异步刷新。

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/809181
推荐阅读
相关标签
  

闽ICP备14008679号