书城项目第五阶段:图书分页
5.1分页模块分析
5.1.1分页模型 Page 的抽取(当前页数,总页数,总记录数,当前页数据,每页记录数)
1. import java.util.List;
2.
3. /**
4. * Page 是分页的模型对象
5. *
6. * @param <T> 是具体的模块的 javaBean 类
7. */
8. public class Page<T> {
9. public static final Integer PAGE_SIZE = 4;
10. // 当前页码
11. private Integer pageNo;
12. // 总页码
13. private Integer pageTotal;
14. // 当前页显示数量
15. private Integer pageSize = PAGE_SIZE;
16. // 总记录数
17. private Integer pageTotalCount;
18. // 当前页数据
19. private List<T> items; 20. }
5.1.2分页的初步实现
BookDao代码:
1. @Override
2. public Integer queryForPageTotalCount(){
3. String sql="select count(*) from t_book";
4. Number count=(Number)queryForSingleValue(sql);
5. return count.intValue();
6. }
7.
8. @Override
9. public List<Book> queryForPageItems(int begin,int pageSize){
10. String sql="select `id` , `name` , `author` , `price` , `sales` , `stock` , `img_path` imgPath
11. from t_book limit?,?";
12. return queryForList(Book.class,sql,begin,pageSize);
13. }
BookService代码:
14. @Override
15. public Page<Book> page(int pageNo,int pageSize){
16. Page<Book> page=new Page<Book>();
17. // 设置当前页码
18. page.setPageNo(pageNo);
19. // 设置每页显示的数量
20. page.setPageSize(pageSize);
21. // 求总记录数
22. Integer pageTotalCount=bookDao.queryForPageTotalCount();
23. // 设置总记录数
24. page.setPageTotalCount(pageTotalCount);
25. // 求总页码
26. Integer pageTotal=pageTotalCount/pageSize;
27. if(pageTotalCount%pageSize>0){
28. pageTotal+=1;
29. }
30. // 设置总页码
31. page.setPageTotal(pageTotal);
32. // 求当前页数据的开始索引
33. int begin=(page.getPageNo()-1)*pageSize;
34. // 求当前页数据
35. List<Book> items=bookDao.queryForPageItems(begin,pageSize);
36. // 设置当前页数据
37. page.setItems(items);
38. return page;
39. }
BookServelet代码:
40. /**
41. * 处理分页功能
42. *
43. * @param req
44. * @param resp
45. * @throws ServletException
46. * @throws IOException
47. */
48. protected void page(HttpServletRequest req,HttpServletResponse resp)throws ServletException,
49. IOException{
50. //1 获取请求的参数 pageNo 和 pageSize
51. int pageNo=WebUtils.parseInt(req.getParameter("pageNo"),1);
52. int pageSize=WebUtils.parseInt(req.getParameter("pageSize"),Page.PAGE_SIZE);
53. //2 调用 BookService.page(pageNo,pageSize):Page 对象
54. Page<Book> page=bookService.page(pageNo,pageSize);
55. //3 保存 Page 对象到 Request 域中
56. req.setAttribute("page",page);
57. //4 请求转发到 pages/manager/book_manager.jsp 页面
58. req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);
59. }
manager_menu.jsp 中【图书管理】请求地址的修改:
book_manager.jsp 修改:
1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
2. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
3. <!DOCTYPE html>
4. <html>
5. <head>
6. <meta charset="UTF-8">
7. <title>图书管理</title>
8. <%-- 静态包含 base 标签、css 样式、jQuery 文件 --%>
9. <%@ include file="/pages/common/head.jsp"%>
10. <script type="text/javascript">
11. $(function () {
12. // 给删除的 a 标签绑定单击事件,用于删除的确认提示操作
13. $("a.deleteClass").click(function () {
14. // 在事件的 function 函数中,有一个 this 对象。这个 this 对象,是当前正在响应事件的 dom 对象。
15. /**
16. * confirm 是确认提示框函数
17. * 参数是它的提示内容
18. * 它有两个按钮,一个确认,一个是取消。
19. * 返回 true 表示点击了,确认,返回 false 表示点击取消。
20. */
21. return confirm("你确定要删除【" + $(this).parent().parent().find("td:first").text() + "】?");
22. // return false// 阻止元素的默认行为===不提交请求
23. });
24. });
25. </script>
26. </head