博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
项目阶段四:分页模块
阅读量:3967 次
发布时间:2019-05-24

本文共 6724 字,大约阅读时间需要 22 分钟。

1)分页模块的分析

在这里插入图片描述

2)分页模型 Page 的抽取(当前页数,总页数,总记录数, 当前页数据,每页记录数

Page代码:

/** * Page是分页的模型对象 * @param 
是具体的模块的javaBean类 */public class Page
{
public static final Integer PAGE_SIZE = 4; //当前页页码 private Integer pageNo; //总页码 private Integer pageTotal; // 当前页显示数量 private Integer pageSize = PAGE_SIZE; //总记录条数 private Integer pageTotalCount; //当前页数据信息 private List
items;

BookDao 代码:

/**  * 查询总记录条数  * @return  */Integer queryFprPageTotalCount(); /**  * 查询显示在当前页的数据  * @param begin 第几条数据开始(从0开始)  * @param pageSize 查询几条数据  * @return 查询数据的集合  */List
queryForPageItems(int begin,int pageSize);

BookDaoImpl 代码:

@Overridepublic Integer queryForPageTotalCount() {
String sql = "select count(*) from t_book"; //Number是各数值类型的父类 Number count = (Number) queryForSingleValue(sql); return count.intValue();}@Overridepublic List
queryForPageItems(int begin, int pageSize) {
String sql = "select `id`,`bookName`,`author`,`price`,`sales`,`stock`,`img_path` imgPath from t_book" + " limit ?,?"; return queryForList(Book.class,sql,begin,pageSize);}

BookDaoTest 代码:

@Testpublic void  queryForPageTotalCount(){
System.out.println(bookDao.queryForPageTotalCount());}@Testpublic void queryForPageItems(){
List
books = bookDao.queryForPageItems(4, 4); for (Book book : books) {
System.out.println(book); }}

BookService 代码:

/** * 当前Page对象所含的信息 * @param pageNo 第几页 * @param pageSize 显示几条数据 * @return */Page
page(int pageNo,int pageSize);BookServiceImpl 代码:public Page
page(int pageNo, int pageSize) {
Page
page = new Page
(); // 设置每页显示的数量 page.setPageSize(pageSize); // 求总记录数 Integer pageTotalCount = bookDao.queryForPageTotalCount(); // 设置总记录数 page.setPageTotalCount(pageTotalCount); Integer pageTotal = pageTotalCount / pageSize; if (pageTotalCount % pageSize > 0) {
pageTotal += 1; } // 设置总页码page.setPageTotal(pageTotal); //设置当前页为第几页 page.setPageNo(pageNo); // 求当前页数据的开始索引 int begin = (page.getPageNo() - 1) * pageSize; // 求当前页数据 List
items = bookDao.queryForPageItems(begin, pageSize); page.setItems(items); return page;}

BookServlet 程序的代码:

/** * 处理分页功能 * @param req * @param resp * @throws ServletException * @throws IOException */protected void page(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1 获取请求的参数 pageNo 和 pageSize int pageNo = WebUtils.parseInt(req.getParameter("pageNo"), 1); int pageSize = WebUtils.parseInt(req.getParameter("pageSize"), Page.PAGE_SIZE); //2 调用BookService.page(pageNo,pageSize):Page对象 Page
page = bookService.page(pageNo, pageSize); //3 保存Page对象到Request域中 req.setAttribute("page",page); //4 请求转发到pages/manager/book_manager.jsp页面 req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);}

3)jsp修改

manager_menu.jsp 中【图书管理】请求地址的修改:

在这里插入图片描述

book_manager.jsp 修改:

${book.bookName} ${book.price} ${book.author} ${book.sales} ${book.stock}
修改
删除

4)首页、上一页、下一页、末页实现

5)分页模块中跳转到指定页数功能实现

book_manager.jsp 修改:

共${requestScope.page.pageTotal}页,${requestScope.page.pageTotalCount}条记录 到第

在这里插入图片描述

head.jsp:

String basePath = request.getScheme()        + "://"        + request.getServerName()        + ":"        + request.getServerPort()        + request.getContextPath()        + "/";//System.out.println(basePath);http://localhost:8080/MyBookStore/pageContext.setAttribute("basePath",basePath);

数据边界的检查:

在bean里面的Page.java文件中:

public void setPageNo(Integer pageNo) {
/* 数据边界的效检查 */ if (pageNo < 1) {
pageNo = 1; } if (pageNo > pageTotal) {
pageNo = pageTotal; } this.pageNo = pageNo;}

注意:在BookServiceImpl.java文件中page.setPageTotal(pageTotal); 语句要在page.setPageNo(pageNo);前面

// 设置总页码page.setPageTotal(pageTotal); //设置当前页为第几页 page.setPageNo(pageNo);// 求当前页数据的开始索引int begin = (page.getPageNo() - 1) * pageSize;//不能直接写成pageNo // 求当前页数据 List
items = bookDao.queryForPageItems(begin, pageSize); page.setItems(items);

6)分页模块中,页码 1,2,【3】,4,5 的显示,要显示 5 个页 码,并且页码可以点击跳转。

需求:显示 5 个连续的页码,而且当前页码在中间。除了当前页码之外,每个页码都可以点击跳到指定页。

  • 情况 1:如果总页码小于等于 5 的情况,页码的范围是:1-总页码
1 页 1 2 页 1,2 3 页 1,2,3 4 页 1,2,3,4 5 页 1,2,3,4,5
  • 情况 2:总页码大于 5 的情况。假设一共 10 页
    • 小情况 1:当前页码为前面 3 个:1,2,3 的情况,页码范围是:1-5.
【1】2,3,4,5 1【2】3,4,5 1,2【3】4,5
  • 小情况 2:当前页码为最后 3 个,8,9,10,页码范围是:总页码减 4- 总页码
6,7【8】9,10 6,7,8【9】10 6,7,8,9【10】
  • 小情况 3:4,5,6,7,页码范围是:当前页码减 2- 当前页码加 2
2,3,4,5,6 3,4,5,6,7 4,5,6,7,8 5,6,7,8,9

book_manager.jsp页面:

在这里插入图片描述

7) 修改分页后,增加,删除,修改图书信息的回显页面

添加:

1、book_manager.jsp在添加的请求地址上追加当前页码参数

	添加图书

2、在 book_edit.jsp 页面中使用隐藏域记录下 pageNo 参数

3、BookServlet.java的addBook()在服务器重定向的时候,获取当前页码追加上进行跳转:

int pageNo = WebUtils.parseInt(req.getParameter("pageNo"), 0);pageNo += 1;//在Page.java中有有效边界值resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + pageNo);

修改:

1、book_manager.jsp在修改的请求地址上追加当前页码参数

	修改

2、在 book_edit.jsp 页面中使用隐藏域记录下 pageNo 参数

3、BookServlet.java的updateBook()在服务器重定向的时候,获取当前页码追加上进行跳转:

resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + req.getParameter("pageNo"));

删除:

1、book_manager.jsp在删除的请求地址上追加当前页码参数

	删除

2、BookServlet.java的deleteBook()在服务器重定向的时候,获取当前页码追加上进行跳转:

resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + req.getParameter("pageNo"));

转载地址:http://wquki.baihongyu.com/

你可能感兴趣的文章
图像处理技术在视频监视中的应用
查看>>
DM8168 HDVPSS中的显示输出
查看>>
光电系统中的视频处理技术
查看>>
NRZ NRZI及扰码等串行编码技术的基本概念
查看>>
ADV7604介绍(一)
查看>>
无人机光电系统图像处理模块
查看>>
VP6802高清视频处理模块
查看>>
VP6802S01高清视频输入模块
查看>>
VP6803高清视频处理模块
查看>>
CAN总线基础知识(一)
查看>>
CAN总线基础知识(二)
查看>>
DM8148的电源和地(二)
查看>>
基于陀螺进行运动检测的电子稳像方案
查看>>
数字视频基础(一)
查看>>
AM5728概述(1)
查看>>
AM5728概述(4)
查看>>
AM5728概述(6)
查看>>
RapidIO协议(1)
查看>>
RapidIO协议(2)
查看>>
DM8168 EMAC/MDIO模块(2)
查看>>