实现分页 包括 区间查询分页

一、获取请求参数 MaxPrice  minPrice pageNo  

把分页和区间分页写在一起   

给区间分页的数据默认值  :

protected  void  getBooks(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String  pageNoStr=request.getParameter("pageNo");
		String  minPriceStr=request.getParameter("minPrice");
		String  maxPriceStr=request.getParameter("maxPrice");
		int pageNo=1;
		int minPrice=0;
		int maxPrice=Integer.MAX_VALUE;
		try{
			pageNo=Integer.parseInt(pageNoStr);
		}catch(NumberFormatException e){
		}
		try{
			minPrice=Integer.parseInt(minPriceStr);
		}catch(NumberFormatException e){
		}
		try{
			maxPrice=Integer.parseInt(maxPriceStr);
		}catch(NumberFormatException e){
		}
		CriteriaBook criteriabook=new CriteriaBook(pageNo,minPrice,maxPrice);
		Page<Book> page=bookService.getPage(criteriabook);
	   request.setAttribute("bookpage", page);
	   request.getRequestDispatcher("/WEB-INF/pages/books.jsp").forward(request, response);
	}

 books.jsp主要的显示页面  

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@taglib  uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="script/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
   $(function(){
	     $("#pageNo").change(function(){
	    	 var val=$(this).val();
	    	 val=$.trim(val);
	    	 //1.校检val 是否为数字 1  2  而不是 a12,c
	    	 var flag=false;
	    	 var  reg=/^\d+$/g;
	    	 var pageNo=0;
	    	 if(reg.test(val)){
	    		 //2.校检val在一个合法范围内 1-totalPageNumber
	    		 pageNo=parseInt(val);
	    		 if(pageNo>=1&&pageNo<=parseInt("${bookpage.totalPageNumber}")){
	    			 flag=true;
	    		 }
	    		 
	    	 }
	    	 if(!flag){
	    		 alert("您输入的不是合法页码");
	    		 $(this).val();
	    		 return ;
	    	 }
	    	 //3.页面条转
	    	 var  href="bookServlet?method=getBooks&PageNo="+pageNo+"&"+$(":hidden").seralize();
	         window.location.href=href;
	     })
   })
</script>
<%@ include file="/commons/queryCondition.jsp" %>
</head>
<body>
     <center>
       <c:if test="${param.title !=null} ">
           您已经将${param.title }放入到购物车中
           <br><br>
       </c:if>
       <c:if test="${!empty sessionScope.ShoppingCart.books }">
          您的购物车中有
          ${sessionScope.ShoppingCart.bookNumber} 本书,<a href="bookServlet?method=forwardPage&page=cart&pageNo=${bookpage.pageNo }">查看购物车</a>
       </c:if>
      <br><br>
      <form action="bookServlet?method=getBooks" method="post">
      Price:
      <input type="text" size="1" name="minPrice"/>
      <input type="text" size="1" name="maxPrice"/>
      <input type="submit" value="Submit"/>
      </form>
       <br><br>
       <table  cellpadding="10">
           <c:forEach items="${bookpage.list }" var="book">
           <tr>
               <td>
                 <a href="bookServlet?method=getBook&pageNo=${bookpage.pageNo }&id=${book.id}"
                 >${book.title} </a>
                 <br> </td>
                 <td>  ${book.author }</td>
                <td>${book.price }</td>  
                <td><a href="bookServlet?method=addToCart&pageNo=${bookpage.pageNo}&id=${book.id}&title=${book.title}">加入购物车</a></td>  
                </tr>
           </c:forEach>
       </table>
       <br><br>
                  共${bookpage.totalPageNumber }页
       &nbsp;&nbsp;
                   当前第 ${bookpage.pageNo}页
       &nbsp;&nbsp;
       <c:if test="${bookpage.hasPrev}">
       <a href="bookServlet?method=getBooks&pageNo=1">首页</a>
       &nbsp;&nbsp;
       <a href="bookServlet?method=getBooks&pageNo=${bookpage.prevPage }">上一页
       </a>
       </c:if>
       &nbsp;&nbsp;
       <c:if test="${bookpage.hasNext }">
          <a href="bookServlet?method=getBooks&pageNo=${bookpage.nextPage }">下一页</a>
          <a href="bookServlet?method=getBooks&pageNo=${bookpage.totalPageNumber }">末页</a>
       </c:if>
       &nbsp;&nbsp;
       转到<input type="text" size="1" id="pageNo"/>页
       
     </center>
</body>
</html>

二、把请求参数封装为CriteriaBook对象、

请求-》servlet-》getBooks方法--》把请求封装进CriteriaBook对象--》调用getPage方法-(此方法返回的是一个page对象调用的是Page对象的方法)--》DaoImpl给Page对象的方法属性赋值  

---区间分页要求有隐藏域 

 <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<script type="text/javascript" src="scripts/jquery-1.7.2.js">
 
</script>
 <script  type="text/javascript">
    $(function(){
  //为所有的超链接都加一个点击事件   获取隐藏域的值   AJAX方法serialize序列化
    	$("a").each(function(){
    		  this.onclick=function(){
    			var serializeVal=$(":hidden").serialize();  
    			 var href=this.href+"&"+serializeVal;
    			 window.location.href=href;
    			 return false;
    		  };
    	});
    });
 </script>
 <input type="hidden" name="minPrice" value="${param.minPrice }"/>
 <input type="hidden" name="maxPrice" value="${param.maxPrice }"/>

  
 
public class BookService {
      private BookDAO  bookDAO=new BookDAOImpl();
      public Page<Book> getPage(CriteriaBook criteriabook){
    	  return bookDAO.getPage(criteriabook);
      }




public class BookDAOImpl extends BaseDAO<Book> implements BookDAO {

	@Override//根据id 获取书本信息
	public Book getBook(int id) {
		String sql = "SELECT id, author, title, price, publishingDate, " +
				"salesAmount, storeNumber, remark FROM mybooks WHERE id = ?";
		return query(sql, id);
	}
	//3. 
	@Override
	public Page<Book> getPage(CriteriaBook cb) {
		Page<Book> page = new Page<>(cb.getPageNo());
		
		page.setTotalItemNumber(getTotalBookNumber(cb));
		//验证
		cb.setPageNo(page.getPageNo());
		page.setList(getPageList(cb, 3));
		
		return page;
	}

	//1. 获取所有书的数量
	@Override
	public long getTotalBookNumber(CriteriaBook cb) {
		String sql = "SELECT count(id) FROM mybooks WHERE price >= ? AND price <= ?";
		return getSingleVal(sql, cb.getMinPrice(), cb.getMaxPrice()); 
	}

	//2. 
	/**
	 * MySQL分页使用LIMIT, 其中索引fromIndex 从0开始
	 */
	@Override
	public List<Book> getPageList(CriteriaBook cb, int pageSize) {
		String sql = "SELECT id, author, title, price, publishingDate, " +
				"salesAmount, storeNumber, remark FROM mybooks " +
				"WHERE price >= ? AND price <= ? " +
				"LIMIT ?, ?";
		
		return queryForList(sql, cb.getMinPrice(), cb.getMaxPrice(), 
				(cb.getPageNo() - 1) * pageSize, pageSize);
	}
package com.greatest.mvcapp.web;
import java.util.List;
public class Page<T> {
	    //当前第几页
		private int pageNo;
		
		//当前页的 List
		private List<T> list;
		
		//每页显示多少条记录
		private int pageSize = 5;
		
		//共有多少条记录
		private long totalItemNumber;

		//构造器中需要对 pageNo 进行初始化
		public Page(int pageNo) {
			super();
			this.pageNo = pageNo;
		}
		
		//需要校验一下
		public int getPageNo() {
			if(pageNo <0)
				pageNo = 1;
			
			if(pageNo > getTotalPageNumber()){
				pageNo = getTotalPageNumber();
			}
			
			return pageNo;
		}
		
		public int getPageSize() {
			return pageSize;
		}
		
		public void setList(List<T> list) {
			this.list = list;
		}
		
		public List<T> getList() {
			return list;
		}
		
		//获取总页数
		public int getTotalPageNumber(){
			
			int totalPageNumber = (int)totalItemNumber / pageSize;
			
			if(totalItemNumber % pageSize != 0){
				totalPageNumber++;
			}
			
			return totalPageNumber;
		}
		
		public void setTotalItemNumber(long totalItemNumber) {
			this.totalItemNumber = totalItemNumber;
		}
		
		public boolean isHasNext(){
			if(getPageNo() < getTotalPageNumber()){
				return true;
			}
			return false;
		}
		public boolean isHasPrev(){
			if(getPageNo() > 1){
				return true;
			}
			return false;
		}
		public int getPrevPage(){
			if(isHasPrev()){
				return getPageNo() - 1;
			}
			return getPageNo();
		}
		public int getNextPage(){
			if(isHasNext()){
				return getPageNo() + 1;
			}
			return getPageNo();
		}
}

猜你喜欢

转载自blog.csdn.net/qq_42676998/article/details/83617653