流程:
首先瀏覽器把請求發給 JSP(index.jsp),index.jsp 實際上調用的是 BookServlet 的 getBooks() 方法。然后到了 Servlet ,這個Servlet 需要獲取請求參數:maxPrice, minPrice, pageNo,把請求參數封裝為 CriteriaBook 對象。如果沒有傳這三個參數,它們是有默認值的。然后調用 BookService 的getPage() 方法,要把 CriteriaBook 傳進來,BookService 再來調 BookDao 的 getPage() 這個方法,然后再在 BookServlet 中把我得到的 page 放到請求域里面,再做一個 forward 去 books.jsp 頁面就可以顯示了。
index.jsp 代碼:
1 <% 2 response.sendRedirect(request.getContextPath() + "/bookServlet?method=getBooks"); 3 %>
BookServlet 關鍵代碼:
1 private BookService bookService = new BookService(); 2 protected void getBooks(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 3 //獲取請求參數 4 String pageNoStr = request.getParameter("pageNo"); 5 String minPriceStr = request.getParameter("minPrice"); 6 String maxPriceStr = request.getParameter("maxPrice"); 7 8 //如果沒有請求參數,設其為默認值 9 int pageNo = 1; 10 int minPrice= 0; 11 int maxPrice = Integer.MAX_VALUE; 12 //轉型 13 try { 14 pageNo = Integer.parseInt(pageNoStr); 15 } catch (NumberFormatException e) {} 16 17 try { 18 minPrice = Integer.parseInt(minPriceStr); 19 } catch (NumberFormatException e) {} 20 21 try { 22 maxPrice = Integer.parseInt(maxPriceStr); 23 } catch (NumberFormatException e) {} 24 25 //將請求參數封裝為 CriticalBook 對象 26 CriteriaBook criteriaBook = new CriteriaBook(minPrice, maxPrice, pageNo); 27 Page<Book> page = bookService.getPage(criteriaBook); 28 //把得到的 page 放入請求域里 29 request.setAttribute("bookpage", page); 30 //頁面的轉發 31 request.getRequestDispatcher("/WEB-INF/pages/books.jsp").forward(request, response); 32 }
BookService 關鍵代碼:
1 private BookDAO bookDAO = new BookDAOImpl(); 2 3 public Page<Book> getPage(CriteriaBook criteriaBook){ 4 return bookDAO.getPage(criteriaBook); 5 }
books.jsp 關鍵代碼:
1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4 <title>Insert title here</title> 5 <script type="text/javascript" src="script/jquery-1.7.2.min.js"></script> 6 <script type="text/javascript"> 7 8 $(function(){ 9 //如果 id 為 pageNo 的text 里發生改變的話 10 $("#pageNo").change(function(){ 11 //獲取text 里的這個 值 12 var pageNoVal = $(this).val(); 13 //去掉前后空格 14 pageNoVal = $.trim(pageNoVal); 15 16 //判斷輸入的是否是合法的數字 1、2、3 之類的 17 var reg = /^\d+$/g; 18 var flag = false; 19 var pageNoVal2 = 0; 20 if(reg.test(pageNoVal)){ 21 //判斷輸入的頁碼是否在正確范圍內 22 pageNoVal2 = parseInt(pageNoVal); 23 if(pageNoVal2 >= 1 && pageNoVal2 <= parseInt("${bookpage.totalPageNumber}")){ 24 flag = true; 25 } 26 } 27 if(!flag){ 28 alert("輸入的頁數不合法"); 29 //判斷輸入不合法后,將 text 置空 30 $(this).val(""); 31 return; 32 } 33 //頁面跳轉 34 var href = "bookServlet?method=getBooks&pageNo=" + pageNoVal2 + "&" + $(":hidden").serialize(); 35 window.location.href = href; 36 }); 37 38 }) 39 </script> 40 <%@ include file="/commans/selectCondition.jsp" %> 41 </head> 42 <body> 43 <center> 53 <form action="bookServlet?method=getBooks" method="post"> 54 Price:<input type="text" size="1" name="minPrice"/>- 55 <input type="text" size="1" name="maxPrice"/> 56 <input type="submit" value="Submit"/> 57 </form> 58 <br><br> 59 <table cellpadding="10"> 60 <c:forEach items="${bookpage.list}" var="book"> 61 <tr> 62 <td> 63 <a href="">${book.title }</a> 64 <br> 65 ${book.author } 66 </td> 67 <td>${book.price }</td> 68 <td><a href="">加入購物車</a></td> 69 </tr> 70 </c:forEach> 71 </table> 72 <br><br> 73 共 ${bookpage.totalPageNumber } 頁 74 75 當前第 ${bookpage.pageNo } 頁 76 77 78 <c:if test="${bookpage.hashPre }"> 79 <a href="bookServlet?method=getBooks&pageNo=1">首頁</a> 80 81 <a href="bookServlet?method=getBooks&pageNo=${bookpage.prePage }">上一頁</a> 82 </c:if> 83 84 <c:if test="${bookpage.hashNext }"> 85 <a href="bookServlet?method=getBooks&pageNo=${bookpage.nextPage }">下一頁</a> 86 87 <a href="bookServlet?method=getBooks&pageNo=${bookpage.totalPageNumber }">末頁</a> 88 </c:if> 89 90 轉到 <input type="text" size="1" id="pageNo"/>頁 91 </center> 92 </body> 93 </html>
over。