JavaWeb:网上书店的案例 之 翻页操作

流程:

首先浏览器把请求发给 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         &nbsp;&nbsp;
75         当前第 ${bookpage.pageNo } 页
76         &nbsp;&nbsp;
77
78         <c:if test="${bookpage.hashPre }">
79             <a href="bookServlet?method=getBooks&pageNo=1">首页</a>
80             &nbsp;&nbsp;
81             <a href="bookServlet?method=getBooks&pageNo=${bookpage.prePage }">上一页</a>
82         </c:if>
83         &nbsp;&nbsp;
84         <c:if test="${bookpage.hashNext }">
85             <a href="bookServlet?method=getBooks&pageNo=${bookpage.nextPage }">下一页</a>
86             &nbsp;&nbsp;
87             <a href="bookServlet?method=getBooks&pageNo=${bookpage.totalPageNumber }">末页</a>
88         </c:if>
89         &nbsp;&nbsp;
90         转到 <input type="text" size="1" id="pageNo"/>页
91     </center>
92 </body>
93 </html>

over。

时间: 2024-10-11 11:47:15

JavaWeb:网上书店的案例 之 翻页操作的相关文章

JavaWeb:网上书店的案例

功能分析: 只有一个角色客户,客户可以 --查看图书信息(包括查看图书详细信息,使用条件(例价格区间)查看图书信息,对图书进行翻页) --把图书加入购物车 --查看购物车 --修改购物车(包括清空购物车,修改购物车单本图书数量,删除单本图书) --结账(填写用户名和账号信息) --查看交易记录 总体架构: MVC 设计模式: --model:POJO --controller:Servlet --view:JSP + EL + JSTL 技术选型: 数据库:Mysql 数据源:C3P0 JDBC

Scrapy爬虫案例01——翻页爬取

之前用python写爬虫,都是自己用requests库请求,beautifulsoup(pyquery.lxml等)解析.没有用过高大上的框架.早就听说过Scrapy,一直想研究一下.下面记录一下我学习使用Scrapy的系列代码及笔记. 安装 Scrapy的安装很简单,官方文档也有详细的说明 http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/install.html .这里不详细说明了. 创建工程 我是用的是pycharm开发,打开pycharm

WPF中ListBox ListView数据翻页浏览笔记(强调:是数据翻页,非翻页动画)

ListBox和ListView在应用中,常常有需求关于每页显示固定数量的数据,然后通过Timer自动或者手动翻页操作,本文介绍到的就是该动作的实现. 一.重点 对于ListBox和ListView来讲,后台绑定的ItemSource绑定的一般都是List<T>格式,而List<T>有个方法是Take和Skip,分别意思是取List部分和跳过List部分. 取数据的格式是:List.take().Skip(); 二.话不多说,实例说话(后面会附有该例子链接,仅供参考) (1)Xam

★android开发--ListView+Json+异步网络图片加载+滚动翻页的例子(图片能缓存,图片不错乱)

例子中用于解析Json的Gson请自己Google下载 主Activity: package COM.Example.Main; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import COM.Example.Main.R; import COM.Example.Main.stringG

列表翻页,选中一条记录

说明:当添加一条记录时,该条记录在列表中的位置有多重情况,在列表的第一页第一项.在列表的最后一页最后一项.在列表中的任意一个位置,针对翻页选中一条目标记录具体事项一项两种情况 情况一:新添加的记录在列表的任意一个位置时,选中该条记录并点击选择然后点击[更新产品]按钮 具体实现代码如下(包含需要调用其他共方法): /** * 翻页逐条比较获得对应的产品 * webs:某一页所有的tr对象,dr:dr对象 */ public static WebElement getpoduct(List<WebE

asp.net GridView 表格之分页显示与翻页功能及自定义翻页页码样式

一.实现分页功能  GridView实现分页只需要在属性框中将AllowPaging(是否在GridView中打开分页功能)设置为true即可 有时打开分页后不显示页码 确保AllowCustomPaging(是否打开对自定义分页的支持)为False即可 二.实现翻页功能  如何点击页码实现翻页呢? 在属性框中事件选择设置PageIndexChanging(在Grid View的当前索引页正在更改事触发)这一事件 后台代码如下 /// <summary> /// 翻页操作 /// 在GridV

使用jQuery.fn自定义jQuery翻页插件

第一次写jQuery插件.自己感觉写的也不怎么样.写jQuery插件利用的就是这个东东 jQuery.fn,例如 jQuery.fn.pluginName=function(){}; 这个是我写的分页插件的样子 插件通过一个外放的函数来进行翻页操作,无论是点击前进.后退.还是改变页面大小,都会调用该函数. 先看看插件的代码结构 (function ($) { //存放插件所需的属性字段 var PagerFields = { }; //插件的私有函数 function setImageButto

JavaWeb之项目实战-网上书店(二十一)

简介 作为这篇博客花费了些许时间练习和整理,最终能掌握,也算上没有白白费时间花在这个项目上面.很庆幸自己坚持把这个项目搞定,虽然这个项目对于实际毫无意义,但对于学习阶段是算作对我的提升吧 关于发布博客我会写出项目历程,第二篇会提炼出重要的控制层部分.总体都是为了巩固和复习使用 还有最后马上要过年了,在此祝大家新年快乐 开发前奏 回顾 Dao设计模式:泛型反射 注解反射@[email protected] Servlet3.0新特性 注解支持/part文件上传/web片段/Cookie的httpO

[.NET领域驱动设计实战系列]专题九:DDD案例:网上书店AOP和站点地图的实现

一.引言 在前面一专题介绍到,要让缓存生效还需要实现对AOP(面向切面编程)的支持.所以本专题将介绍了网上书店案例中AOP的实现.关于AOP的概念,大家可以参考文章:http://www.cnblogs.com/jin-yuan/p/3811077.html.这里我简单介绍下AOP:AOP可以理解为对方法进行截获,这样就可以在方法调用前或调用后插入需要的逻辑.例如可以在方法调用前,加入缓存查找逻辑等.这里缓存查找逻辑就在方法调用前被执行.通过对AOP的支持,每个方法就可以分为3部分了,方法调用前