MySQL的jsp分页

只写项目中的分页功能,各位用的时候要根据自己的情况修改。

首先是后台的实体类,MyPage(类名自定义):

public class MyPage {
	private Integer pageBegin = 1;// 页面页码的开始页,默认第1页
	private Integer pageEnd;// 页面页码的结束页
	private Integer pageNum = 10;// 页面显示的页码数量,默认为10
	private Integer pageSize = 10; // 每页显示数据的数量,默认显示10条数据
	private Integer pageCursor = 0;// 分页游标值,用于数据库查询,和pageSize一起使用
	private Integer totalNum;// 数据的总记录数
	private Integer pageNo = 1;// 当前页数
	private Integer pageCount;// 总页数

	// 页面需要用的值:pageBegin, pageEnd, pageSize, pageNo, pageCount, totalNum
	// 数据库查询需要的值:pageCursor, pageSize

	public MyPage() {
		super();
	}

	public MyPage(int pageNo, int pageSize, int totalNum) {
		this.pageNo = pageNo;
		this.pageSize = pageSize;
		this.totalNum = totalNum;
		this.pageCount = (int) Math.ceil((double) totalNum / pageSize);
		this.pageCursor = (pageNo - 1) * pageSize;
		if (pageCount / pageNum < 1) {
			this.pageEnd = pageCount;
		} else if (pageNo % pageNum == 0) {
			this.pageBegin = pageNum * (pageNo / pageNum - 1) + 1;
			this.pageEnd = pageNo;
		} else if (pageNum * (pageNo / pageNum + 1) < pageCount) {
			this.pageBegin = pageNum * (pageNo / pageNum) + 1;
			this.pageEnd = pageNum * (pageNo / pageNum + 1);
		} else if (pageNum * (pageNo / pageNum + 1) > pageCount) {
			this.pageBegin = pageNum * (pageNo / pageNum) + 1;
			this.pageEnd = pageCount;
		}
	}
    
    // '''get和set方法IDE生成,此处略
}

dao、service、serviceImpl的代码省略,下面是controller的代码:

@RequestMapping(value = "consumeList", method = RequestMethod.GET)
public ModelAndView selectConsumeList(HttpServletRequest request, Order order, MyPage page) {
    Map<String, Object> map = new HashMap<String, Object>();
    
    int totalNum = orderService.countConsumeTotalNum(order);// 总记录数
    //自定义的构造器,传入这3个参数可以获取所有myPage的值
    MyPage myPage = new MyPage(page.getPageNo(), page.getPageSize(), totalNum);

    List<Order> objectList = orderService.selectConsumeOrderList(order, myPage);

    map.put("page", myPage);
    map.put("order", order);
    map.put("consumeOrder", objectList);
    return new ModelAndView("order/consumeList", map);
}

页面的代码,我用了jstl表达式:

<!-- 下边所有代码在table后,可复用,样式自行调整 -->
<span>
    显示行数: 
    <select class="form-control" id="pageSize" 
    style="width: 150px; display: inline; margin-top: 5px;" onchange="showSize()">
        <option value="10" 
            <c:if test ="${page.pageSize eq 10}">selected</c:if>>10</option>
        <option value="20" 
            <c:if test ="${page.pageSize eq 20}">selected</c:if>>20</option>
        <option value="50" 
            <c:if test ="${page.pageSize eq 50}">selected</c:if>>50</option>
        <option value="100" 
            <c:if test ="${page.pageSize eq 100}">selected</c:if>>100</option>
    </select>
</span>
<!-- 页码跳转 -->
<span style="float:right;margin-right:2%;">
    共 ${page.pageCount } 页/共 ${page.totalNum}条数据,当前为第 <lable id="pageNo">${page.pageNo }</lable> 页,
    <!-- 上一页 -->
    <c:if test="${page.pageNo != 1 }">
        <c:if test="${page.pageCount > 1 }">
            <a href="javascript:void(0);" onclick="prePage(${page.pageNo })"><上一页></a>                
        </c:if>
    </c:if>
			           	
    <!-- 页码 -->
    <c:forEach var="i" begin="${page.pageBegin }" end="${page.pageEnd}">
        <c:if test="${i == page.pageNo}">
            <lable>${i } </lable>
        </c:if>
        <c:if test="${i != page.pageNo }">
            <a href="javascript:void(0);" onclick="gotoPage(${i})">${i}</a>
        </c:if>
    </c:forEach>
				        	
    <!-- 下一页 -->
    <c:if test="${page.pageNo != page.pageCount }">
        <c:if test="${page.pageCount > 1 }">
            <a href="javascript:void(0);" onclick="nextPage(${page.pageNo })"><下一页></a>    
        </c:if>
    </c:if>
    <!-- 输入页码进行跳转,只能输入数字 -->
    <input type="text" id="jumpPage"  onkeyup="value=value.replace(/[^\d]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" >
    <button onclick="jumpPage(${page.pageCount})">跳转</button>
</span>

一些跳转查询的js就省略了,主要是看用到了Mypage的哪些属性。

注意几个点:

* 数据库传参查询的话,除了对象的一些属性,分页只需要传pageNo(当前页)和pageSize(每页显示的数据数量)。

* 还有就是,每次改变pageSize时,都要设置pageNo为1,要不页面数据有时会为空。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值