SSM 实现分页

[java]  view plain  copy
  1. /**  
  2.  * 分页 工具类 
  3.  */    
  4. public class Page implements Serializable {    
  5.     private static final long serialVersionUID = -2213069645383858323L;  
  6.     private int pageNow = 1// 当前页数    
  7.     private int pageSize = 4// 每页显示记录的条数    
  8.     private int totalCount; // 总的记录条数    
  9.     private int totalPageCount; // 总的页数    
  10.     private int startPos; // 开始位置,从0开始    
  11.     private boolean hasFirst;// 是否有首页    
  12.     private boolean hasPre;// 是否有前一页    
  13.     private boolean hasNext;// 是否有下一页    
  14.     private boolean hasLast;// 是否有最后一页    
  15.     /**  
  16.      * 通过构造函数 传入  总记录数  和  当前页  
  17.      * @param totalCount  
  18.      * @param pageNow  
  19.      */    
  20.     public Page(int totalCount, int pageNow) {    
  21.         this.totalCount = totalCount;    
  22.         this.pageNow = pageNow;    
  23.     }    
  24.     /**  
  25.      * 取得总页数,总页数=总记录数/总页数  
  26.      * @return  
  27.      */    
  28.     public int getTotalPageCount() {    
  29.         totalPageCount = getTotalCount() / getPageSize();    
  30.         return (totalCount % pageSize == 0) ? totalPageCount    
  31.                 : totalPageCount + 1;    
  32.     }    
  33.     public void setTotalPageCount(int totalPageCount) {    
  34.         this.totalPageCount = totalPageCount;    
  35.     }    
  36.     public int getPageNow() {    
  37.         return pageNow;    
  38.     }    
  39.     public void setPageNow(int pageNow) {    
  40.         this.pageNow = pageNow;    
  41.     }    
  42.     public int getPageSize() {    
  43.         return pageSize;    
  44.     }    
  45.     public void setPageSize(int pageSize) {    
  46.         this.pageSize = pageSize;    
  47.     }    
  48.     public int getTotalCount() {    
  49.         return totalCount;    
  50.     }    
  51.     public void setTotalCount(int totalCount) {    
  52.         this.totalCount = totalCount;    
  53.     }    
  54.     /**  
  55.      * 取得选择记录的初始位置  
  56.      * @return  
  57.      */    
  58.     public int getStartPos() {    
  59.         return (pageNow - 1) * pageSize;    
  60.     }    
  61.     public void setStartPos(int startPos) {    
  62.         this.startPos = startPos;    
  63.     }    
  64.     /**  
  65.      * 是否是第一页  
  66.      * @return  
  67.      */    
  68.     public boolean isHasFirst() {    
  69.         return (pageNow == 1) ? false : true;    
  70.     }    
  71.     public void setHasFirst(boolean hasFirst) {    
  72.         this.hasFirst = hasFirst;    
  73.     }    
  74.     /**  
  75.      * 是否有首页  
  76.      * @return  
  77.      */    
  78.     public boolean isHasPre() {    
  79.         // 如果有首页就有前一页,因为有首页就不是第一页    
  80.         return isHasFirst() ? true : false;    
  81.     }    
  82.     public void setHasPre(boolean hasPre) {    
  83.         this.hasPre = hasPre;    
  84.     }    
  85.     /**  
  86.      * 是否有下一页  
  87.      * @return  
  88.      */    
  89.     public boolean isHasNext() {    
  90.         // 如果有尾页就有下一页,因为有尾页表明不是最后一页    
  91.         return isHasLast() ? true : false;    
  92.     }    
  93.     
  94.     public void setHasNext(boolean hasNext) {    
  95.         this.hasNext = hasNext;    
  96.     }    
  97.     /**  
  98.      * 是否有尾页  
  99.      * @return  
  100.      */    
  101.     public boolean isHasLast() {    
  102.         // 如果不是最后一页就有尾页    
  103.         return (pageNow == getTotalCount()) ? false : true;    
  104.     }    
  105.     
  106.     public void setHasLast(boolean hasLast) {    
  107.         this.hasLast = hasLast;    
  108.     }    
  109. }    

接着Mapper接口中定义分类的方法


传入两个参数,分别是开始页和每页显示记录的条数。

 

Mapper的映射文件中的SQL分页语句

[html]  view plain  copy
  1. <select id="findPages" resultType="com.dh15.pojo.Goods">  
  2.         select g.id,g.name,g.price,g.num,c.class_name,g.pic,g.des from  tb_goods g,tb_class c   
  3.         where g.class_id=c.cid limit #{startPos},#{pageSize}  
  4. </select>  

接着在控制类(Controller)中查询商品,同时进行分页。

查询商品方法

[java]  view plain  copy
  1. /** 
  2.      * 查询商品信息,实现分页 
  3.      * @param goods 
  4.      * @return 
  5.      * @throws Exception 
  6.      */  
  7.     @RequestMapping("/queryPages")  
  8.     public String queryPages(HttpServletRequest request, Model model) throws Exception {    
  9.         String pageNow = request.getParameter("pageNow");    
  10.         Page page = null;    
  11.         List<Goods> goods = new ArrayList<Goods>();    
  12.         int totalCount = (int) service.getGoodsCount(1);    
  13.         if (pageNow != null) {    
  14.             page = new Page(totalCount, Integer.parseInt(pageNow));    
  15.             goods = this.service.findPages(page.getStartPos(), page.getPageSize());  
  16.         } else {    
  17.             page = new Page(totalCount, 1);    
  18.             goods = this.service.findPages(page.getStartPos(), page.getPageSize());    
  19.         }    
  20.         model.addAttribute("goods_list", goods);    
  21.         model.addAttribute("page", page);    
  22.         return "goods/FenYeTest";  
  23.     }    

这里需要注意一下,遍历商品时没有点击页数,所以当前页默认是空的,这里要在方法里面进行判断,如果pageNow为空,传一个1到构造函数,否则会报空指针。

 

最后,在jsp页面显示查询的商品列表,同时实现点击上一页,下一页,首页,尾页等常见分页中的操作

[html]  view plain  copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
  4. <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>  
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  6. <html>  
  7. <head>  
  8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  9. <title>商品查询列表</title>  
  10. </head>  
  11. <body>  
  12.   
  13.     <table width="100%" border=1>  
  14.         <tr>  
  15.             <td>选择</td>  
  16.             <td>商品名称</td>  
  17.             <td>商品价格</td>  
  18.             <td>生产数量</td>  
  19.             <td>商品类别</td>  
  20.             <td>商品图片</td>  
  21.             <td>商品信息</td>  
  22.             <td>操作</td>  
  23.         </tr>  
  24.         <c:forEach items="${goods_list }" var="item">  
  25.             <tr>  
  26.                 <td>${item.id}<input type="hidden" name="id" value="${item.id}" /></td>  
  27.                 <td>${item.name }</td>  
  28.                 <td>${item.price }</td>  
  29.                 <td>${item.num }</td>  
  30.                 <td>${item.classInfo.class_name }</td>  
  31.                 <td><img style="width:110px;height:120px" alt="商品图片"  
  32.                     src="http://localhost/pic/${item.pic }"></td>  
  33.                 <td>${item.des }</td>  
  34.                 <td>  
  35.                 <a href="${pageContext.request.contextPath }/findGoodsById.action?id=${item.id}">修改</a>  
  36.                 <a href="${pageContext.request.contextPath }/delGoods.action?id=${item.id}">删除</a>  
  37.                 </td>  
  38.             </tr>  
  39.         </c:forEach>  
  40.     </table>  
  41.     <div align="center">    
  42.             <font size="2">第    
  43.             ${page.pageNow} 页</font> <a href="queryPages.action?pageNow=1">首页</a>    
  44.         <c:choose>    
  45.             <c:when test="${page.pageNow - 1 > 0}">    
  46.                 <a href="queryPages.action?pageNow=${page.pageNow - 1}">上一页</a>    
  47.             </c:when>    
  48.             <c:when test="${page.pageNow - 1 <= 0}">    
  49.                 <a href="queryPages.action?pageNow=1">上一页</a>    
  50.             </c:when>    
  51.         </c:choose>    
  52.         <c:choose>    
  53.             <c:when test="${page.totalPageCount==0}">    
  54.                 <a href="queryPages.action?pageNow=${page.pageNow}">下一页</a>    
  55.             </c:when>    
  56.             <c:when test="${page.pageNow + 1 < page.totalPageCount}">    
  57.                 <a href="queryPages.action?pageNow=${page.pageNow + 1}">下一页</a>    
  58.             </c:when>    
  59.             <c:when test="${page.pageNow + 1 >= page.totalPageCount}">    
  60.                 <a href="queryPages.action?pageNow=${page.totalPageCount}">下一页</a>    
  61.             </c:when>    
  62.         </c:choose>    
  63.         <c:choose>    
  64.             <c:when test="${page.totalPageCount==0}">    
  65.                 <a href="queryPages.action?pageNow=${page.pageNow}">尾页</a>    
  66.             </c:when>    
  67.             <c:otherwise>    
  68.                 <a href="queryPages.action?pageNow=${page.totalPageCount}">尾页</a>    
  69.             </c:otherwise>    
  70.         </c:choose>    
  71.     </div>    
  72. </body>  
  73. </html>  

最终效果图:




  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值