目录
1、分页的初步实现
Page类的编写
package pojo;
import java.util.List;
public class Page<T> {
public static final Integer PAGE_SIZE = 4;
// 当前页码
private Integer pageNo;
// 总页码
private Integer pageTotal;
// 每页的容量
private Integer pageSize = PAGE_SIZE;
// 总的数据量
private Integer pageTotalCount;
// 当前页数据
private List<T> items;
public Integer getPageNo() {
return pageNo;
}
public void setPageNo(Integer pageNo) {
this.pageNo = pageNo;
}
public Integer getPageTotal() {
return pageTotal;
}
public void setPageTotal(Integer pageTotal) {
this.pageTotal = pageTotal;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getPageTotalCount() {
return pageTotalCount;
}
public void setPageTotalCount(Integer pageTotalCount) {
this.pageTotalCount = pageTotalCount;
}
public List<T> getItems() {
return items;
}
public void setItems(List<T> items) {
this.items = items;
}
@Override
public String toString() {
return "Page{" +
"pageNo=" + pageNo +
", pageTotal=" + pageTotal +
", pageSize=" + pageSize +
", pageTotalCount=" + pageTotalCount +
", items=" + items +
'}';
}
}
在BookDao接口与实现类中增加查询总记录、查询指定页面所有数据的方法
public Integer queryForPageTotalCount();
public List<Book> queryForPageItems(int begin, int pageSize);
@Override
public Integer queryForPageTotalCount() {
String sql = "select count(*) from t_book";
Number count = (Number) queryForSingleValue(sql);
return count.intValue();
}
@Override
public List<Book> queryForPageItems(int begin, int pageSize) {
String sql = "select `id`,`name`,`author`,`price`,`sales`,`stock`,`img_path` `imgPath` from t_book limit ?,?";
List<Book> books = queryForList(Book.class, sql, begin, pageSize);
return books;
}
在BookService接口与类中添加page业务
Page<Book> page(int pageNo, int pageSize);
@Override
public Page<Book> page(int pageNo, int pageSize) {
Page<Book> page = new Page<Book>();
page.setPageNo(pageNo);
page.setPageSize(pageSize);
// 1 求总的记录数
Integer pageTotalCount = bookDao.queryForPageTotalCount();
page.setPageTotalCount(pageTotalCount);
// 2 求总的页码
Integer pageTotal = pageTotalCount / pageSize;
if (pageTotalCount % pageSize > 0) {
pageTotal++;
}
page.setPageTotal(pageTotal);
// 3 求当前页数据
// 设置开始索引位置
int begin = (pageNo - 1) * Page.PAGE_SIZE;
List<Book> items = bookDao.queryForPageItems(begin,pageSize);
page.setItems(items);
return page;
}
在BookServlet类中添加page功能
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(int pageNo,int pageSize)==Page,获取Page对象
Page<Book> page = bookService.page(pageNo,pageSize);
// 3 将page保存到域对象中
req.setAttribute("page",page);
// 4 请求转发到pages/manager/book_manager.jsp页面
req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);
}
修改图书管理菜单的指向地址
<a href="manager/bookServlet?action=page">图书管理</a>
修改页面遍历的数据内容
<c:forEach items="${requestScope.page.items}" var="book">
增加分页菜单信息
<div id="page_nav">
<a href="#">首页</a>
<a href="#">上一页</a>
<a href="#">3</a>
【${requestScope.page.pageNo}】
<a href="#">5</a>
<a href="#">下一页</a>
<a href="#">末页</a>
共${requestScope.page.pageTotal}页,${requestScope.page.pageTotalCount}条记录 到第<input value="4" name="pn" id="pn_input"/>页
<input type="button" value="确定">
</div>
2、首页、末页、上一页、下一页的设置
<div id="page_nav">
<%--页码大于1,才显示首页和上一页--%>
<c:if test="${requestScope.page.pageNo > 1}">
<a href="manager/bookServlet?action=page&pageNo=1">首页</a>
<a href="manager/bookServlet?action=page&pageNo=${requestScope.page.pageNo-1}">上一页</a>
</c:if>
<a href="#">3</a>
【${requestScope.page.pageNo}】
<a href="#">5</a>
<%--页码小于总页码,才显示末页和下一页--%>
<c:if test="${requestScope.page.pageNo < requestScope.page.pageTotal}">
<a href="manager/bookServlet?action=page&pageNo=${requestScope.page.pageNo+1}">下一页</a>
<a href="manager/bookServlet?action=page&pageNo=${requestScope.page.pageTotal}">末页</a>
</c:if>
共${requestScope.page.pageTotal}页,${requestScope.page.pageTotalCount}条记录 到第<input value="4" name="pn" id="pn_input"/>页
<input type="button" value="确定">
</div>
3、跳转页面功能的实现
将basePath放入page域
<%
String basePath = request.getScheme()
+ "://" + request.getServerName()
+ ":" + request.getServerPort()
+ request.getContextPath()
+ "/";
pageContext.setAttribute("basePath",basePath);
%>
给跳转按钮绑定事件
共${requestScope.page.pageTotal}页,${requestScope.page.pageTotalCount}条记录
到第<input value="${param.pageNo}" name="pn" id="pn_input"/>页
<input id="searchPageBtn" type="button" value="确定">
<script type="text/javascript">
$(function () {
$("#searchPageBtn").click(function () {
var pageNo = $("#pn_input").val();
location.href="${pageScope.basePath}manager/bookServlet?action=page&pageNo=" + pageNo;
});
});
</script>
服务器端输入数据有效边界的设置
// 数据边界的有效检查
if(pageNo < 1) {
pageNo = 1;
}
if (pageNo > pageTotal) {
pageNo = pageTotal;
}
page.setPageNo(pageNo);
4、页码的输出实现
页面的编写
<%--页码输出开始--%>
<c:choose>
<%--情况1:总的页码数小于等于5--%>
<c:when test="${requestScope.page.pageTotal <= 5}">
<c:set var="begin" value="1"></c:set>
<c:set var="end" value="${requestScope.page.pageTotal}"></c:set>
</c:when>
<%--情况2:总的页码数大于5页--%>
<c:when test="${requestScope.page.pageTotal > 5}">
<c:choose>
<%--子情况1:当前页面在前三页--%>
<c:when test="${requestScope.page.pageNo <= 3}">
<c:set var="begin" value="1"></c:set>
<c:set var="end" value="5"></c:set>
</c:when>
<%--子情况2:当前页面在最后三页--%>
<c:when test="${requestScope.page.pageNo > requestScope.page.pageTotal - 4}">
<c:set var="begin" value="${requestScope.page.pageTotal - 4}"></c:set>
<c:set var="end" value="${requestScope.page.pageTotal}"></c:set>
</c:when>
<%--子情况3:当前页面在中间--%>
<c:otherwise>
<c:set var="begin" value="${requestScope.page.pageNo - 2}"></c:set>
<c:set var="end" value="${requestScope.page.pageNo + 2}"></c:set>
</c:otherwise>
</c:choose>
</c:when>
</c:choose>
<c:forEach begin="${begin}" end="${end}" var="i">
<c:if test="${requestScope.page.pageNo == i}">
【${i}】
</c:if>
<c:if test="${requestScope.page.pageNo != i}">
<a href="manager/bookServlet?action=page&pageNo=${i}">${i}</a>
</c:if>
</c:forEach>
<%--页码输出结束--%>
修改添加操作后的页面转发地址
<td><a href="pages/manager/book_edit.jsp?pageNo=${requestScope.page.pageTotal}">添加图书</a></td>
<input type="hidden" name="pageNo" value="${param.pageNo}">
protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int pageNo = WebUtils.parseInt(req.getParameter("pageNo"),0);
pageNo+=1;
// 1 获取请求的参数==封装成为 Book 对象
Book book = WebUtils.copyParamToBean(req.getParameterMap(),new Book());
// 2 调用 BookService.addBook()保存图书
bookService.addBook(book);
// 3 跳到图书列表页面
resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + pageNo);
}
删除、修改操作后的页面转发
<td><a href="manager/bookServlet?action=getBook&id=${book.id}&pageNo=${requestScope.page.pageNo}">修改</a></td>
<td><a class="deleteClass" href="manager/bookServlet?action=delete&id=${book.id}&pageNo=${requestScope.page.pageNo}">删除</a></td>
protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1 获取请求的参数——需要删除的图书id
int id = WebUtils.parseInt(req.getParameter("id"), 0);
// 2 使用bookService执行删除操作
bookService.deleteBookById(id);
// 3 页面重定向回图书列表管理页面(/manager/bookServlet?action=list)
resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + req.getParameter("pageNo"));
}
protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1 获取请求的参数并封装成对象
Book book = WebUtils.copyParamToBean(req.getParameterMap(), new Book());
// 2 执行bookService.updateBook操作修改数据
bookService.updateBook(book);
// 3 请求重定向到/manager/bookServlet?action=list
resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + req.getParameter("pageNo"));
}
注:本文章所含内容来源于尚硅谷教育,仅供学习参考使用。