(二)翻页的实现

 

 

 

 Page.java

package com.aff.bookstore.web;

import java.util.List;

public class Page<T> {
    // 当前第几页
    private int pageNo;

    // 当前页的List
    private List<T> list;

    // 每页显示多少条记录
    private int pageSize = 3;

    // 共有多少条记录
    private long totalItemNumber;

    public Page() {
        super();
        // TODO Auto-generated constructor stub
    }

    // 构造器中需要对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 void setTotalItemNumber(long totalItemNumber) {
        this.totalItemNumber = totalItemNumber;
    }
    
    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 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();
    }
    
}

 

CriteriaBook.java

package com.aff.bookstore.web;

public class CriteriaBook {
    private  float minPrice  = 0;
    private float maxPrice = Integer.MAX_VALUE;//2^31 - 1
    
    private int pageNo;

    public float getMinPrice() {
        return minPrice;
    }

    public void setMinPrice(float minPrice) {
        this.minPrice = minPrice;
    }

    public float getMaxPrice() {
        return maxPrice;
    }

    public void setMaxPrice(float maxPrice) {
        this.maxPrice = maxPrice;
    }

    public int getPageNo() {
        return pageNo;
    }

    public void setPageNo(int pageNo) {
        this.pageNo = pageNo;
    }

    public CriteriaBook() {
        super();
        // TODO Auto-generated constructor stub
    }

    public CriteriaBook(float minPrice, float maxPrice, int pageNo) {
        super();
        this.minPrice = minPrice;
        this.maxPrice = maxPrice;
        this.pageNo = pageNo;
    }

    @Override
    public String toString() {
        return "CriteriaBook [minPrice=" + minPrice + ", maxPrice=" + maxPrice + ", pageNo=" + pageNo + "]";
    }
    
}

 

BookServlet.java

package com.aff.bookstore.servlet;

import java.io.IOException;
import java.lang.reflect.Method;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.aff.bookstore.domain.Book;
import com.aff.bookstore.service.BookService;
import com.aff.bookstore.web.CriteriaBook;
import com.aff.bookstore.web.Page;

@WebServlet("/bookServlet")
public class BookServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    private BookService bookService = new BookService();

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String methodName = request.getParameter("method");
        try {
            Method method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class,
                    HttpServletResponse.class);
            method.setAccessible(true);
            method.invoke(this, request, response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    protected void getBook(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String idStr = request.getParameter("id");
        int id = -1;
        Book book = null;

        try {
            id = Integer.parseInt(idStr);
        } catch (NumberFormatException e) {}

        if (id>0) {
            book = bookService.getBook(id);
            if (book == null) {
                response.sendRedirect(request.getContextPath() + "/errror-1.jsp");
                return;
            }
        }
        request.setAttribute("book", book);
        request.getRequestDispatcher("/WEB-INF/pages/book.jsp").forward(request, response);
    }

    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 (Exception e) {
        }
        try {
            minPrice = Integer.parseInt(minPriceStr);
        } catch (Exception e) {
        }
        try {
            maxPrice = Integer.parseInt(maxPriceStr);
        } catch (Exception e) {
        }
        CriteriaBook criteriaBook = new CriteriaBook(minPrice, maxPrice, pageNo);
        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   prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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.12.3.js"></script>
<script type="text/javascript">
         $(function(){
             $("a").click(function(){
                 var serializeVal = $(":hidden").serialize();
                 var href = this.href+"&"+serializeVal;
                 window.location.href = href;
                 return false; 
             });
             
        $("#pageNo").change(function(){
            var val = $(this).val();
            val = $.trim(val);//去除空格
            
               //1.校验 val  是否为数字
               var reg = /^\d+$/g;
               if(!reg.test(val)){
                   alert("输入的不是合法的页码")
                   $(this).val("")
                   return ;
               }
               //2.检验 val 在一个合法的范围内, 1-totalPageNumber
               var pageNo = parseInt(val);
               if(pageNo<1 || pageNo>parseInt("${bookpage.totalPageNumber}")){
                   alert("输入的不是合法的页码");
                   $(this).val("");
                   return;
                   }
               //3.页面跳转,保证把之前的条件带过去
               var href = "bookServlet?method=getBooks&pageNo="+pageNo+"&"+$(":hidden").serialize();
               window.location.href =href ;
               return;               
        }); 
        });  
</script>
</head>
<body>
    <input type="hidden" name="minPrice"  value="${param.minPrice}"/>
    <input type="hidden" name="maxPrice"  value="${param.maxPrice}"/>

    <center>
        <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>
                                ${book.author }
                        </td>                            
                        <td>${book.price }</td>                            
                        <td><a  href="">加入购物车</a></td>                            
                    </tr>
                </c:forEach>
        </table>
        <br><br>
        共 ${bookpage.totalPageNumber }页&nbsp;&nbsp;当前第${bookpage.pageNo }页
        
        <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>
        
        <c:if test="${bookpage.hasNext }">
                <a href="bookServlet?method=getBooks&pageNo=${bookpage.nextPage }">下一页</a>&nbsp;&nbsp;
                <a href="bookServlet?method=getBooks&pageNo=${bookpage.totalPageNumber}">末页</a>
        </c:if>
        &nbsp;&nbsp;
        
        转到<input type="text" size="1" id="pageNo"/></center>
</body>
</html>

 

queryCondition.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <script type="text/javascript">
         $(function(){
             $("a").click(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}"/>
    

 

目录

 

 运行效果如下

 

posted @ 2020-05-18 01:12  林淼零  阅读(249)  评论(0编辑  收藏  举报