1.分頁萬精油jsp頁面,只需要傳入pagebean對象
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %> <div class="dataTables_paginate paging_simple_numbers" id="DataTables_Table_0_paginate"> <a class="paginate_button previous disabled" aria-controls="DataTables_Table_0" data-dt-idx="0" tabindex="0" id="DataTables_Table_0_previous" href="<c:url value="${page.url}¤tPage=1"/>">首頁</a> <c:if test="${page.currentPage > 1 }"> <a class="paginate_button previous disabled" aria-controls="DataTables_Table_0" data-dt-idx="0" tabindex="0" id="DataTables_Table_0_previous" href="<c:url value='${page.url}¤tPage=${page.currentPage - 1 }'/>">上一頁</a> </c:if> <c:choose> <c:when test="${page.totalPage <= 10 }"> <c:set var="begin" value="1"/> <c:set var="end" value="${page.totalPage }"/> </c:when> <c:otherwise> <c:set var="begin" value="${page.currentPage-4 }"/> <c:set var="end" value="${page.currentPage+5 }"/> <c:choose> <c:when test="${begin < 1 }"> <c:set var="begin" value="1"/> <c:set var="end" value="10"/> </c:when> <c:when test="${end > page.totalPage }"> <c:set var="begin" value="${page.totalPage-9 }"/> <c:set var="end" value="${page.totalPage }"/> </c:when> </c:choose> </c:otherwise> </c:choose> <c:forEach begin="${begin}" end="${end}" var="i"> <c:choose> <c:when test="${i == page.currentPage}"><span style="color: red">${i}</span></c:when> <c:otherwise> <span><a class="paginate_button current" aria-controls="DataTables_Table_0" data-dt-idx="1" tabindex="0" href="<c:url value='${page.url}¤tPage=${i}'/>" > ${i}</a> </span> </c:otherwise> </c:choose> </c:forEach> <c:if test="${page.currentPage < page.totalPage }"> <a class="paginate_button next disabled" aria-controls="DataTables_Table_0" data-dt-idx="2" tabindex="0" id="DataTables_Table_0_next" href="<c:url value='${page.url}¤tPage=${page.currentPage + 1 }'/>" >下一頁</a> </c:if> <a class="paginate_button next disabled" aria-controls="DataTables_Table_0" data-dt-idx="2" tabindex="0" id="DataTables_Table_0_next" href="<c:url value='${page.url}¤tPage=${page.totalPage}'/>" >尾頁</a> </div>
2.PagaBean類,儲存分頁需要的數據
/** * 有些沒必要設置get/set,為了節省時間,不搞了 * * @param <T> */ public class PageBean<T> { private int currentPage; //當前頁 private int pageSize; //每頁記錄數 private int totalPage;//總頁數 private List<T> pageBean;//當前頁對象 private String url;//用來設置Servlet訪問路徑及method參數 private int totleCount;//總數據數 public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public List<T> getPageBean() { return pageBean; } public void setPageBean(List<T> pageBean) { this.pageBean = pageBean; } public String getUrl() { return url; } public void setUrl(String url,HttpServletRequest request) { String uri = request.getRequestURI(); //返回“項目名/請求Servlet名”的字符串 String quString = request.getQueryString(); //獲取請求的參數部分 url = uri + "?" + quString; //拼串,請求地址:項目名/servlet名?參數 if (url.contains("¤tPage")) { //截串,將沒有用的參數截去,只留下用於反射的method參數 url = url.substring(0, url.indexOf("¤tPage")); } this.url=url; } public int getTotleCount() { return totleCount; } public void setTotleCount(int totleCount) { this.totleCount = totleCount; } }
3.dao層,主要分為兩個查詢方法,一個是總記錄數,一個是單頁的對象集合,工具類用的是dbutils,數據連接池用的是c3p0
//查詢全部獲得總記錄數 @Override public Integer totleCount() { String sql = "SELECT COUNT(*) FROM `grade` AS g LEFT JOIN `class` c ON g.`gradeId`=c.`gradeId`"; Integer totleCount = 0; try { totleCount=((Long)queryRunner.query(sql, new ScalarHandler<>())).intValue(); } catch (SQLException e) { e.printStackTrace(); } return totleCount; } //查詢全部獲取當前頁對象集合 @Override public List<GradeAndClass> getRoleList(int pagesize, int begin) { String sql="SELECT g.`gradeId`,g.`gradeName`,c.`classId`,c.`className` ,c.`orderID` FROM `grade` AS g LEFT JOIN `class` c ON g.`gradeId`=c.`gradeId` LIMIT ?,?"; List<GradeAndClass> gas=null; try { gas = queryRunner.query(sql, new BeanListHandler<GradeAndClass>(GradeAndClass.class),new Object[]{begin,pagesize}); } catch (SQLException e) { e.printStackTrace(); } return gas; }
4.service層,調用dao層查詢總記錄數和當前頁對象集合的方法,用於配置pagebean各個屬性值,返回pageBean對象
//分頁+查詢全部 @Override public PageBean<GradeAndClass> page(Integer pagesize, Integer currentPage,HttpServletRequest request) { PageBean<GradeAndClass> pageBean = new PageBean<>(); //頁面大小 pageBean.setPageSize(pagesize); //從數據庫得到總記錄數,將其放在pageBean里面 pageBean.setTotleCount(gcDao.totleCount()); //總頁碼 pageBean.setTotalPage(pageBean.getTotleCount() % pageBean.getPageSize() == 0 ? pageBean.getTotleCount() / pageBean.getPageSize() : pageBean.getTotleCount() / pageBean.getPageSize() + 1); //當前頁 pageBean.setCurrentPage(currentPage); //設置url pageBean.setUrl("/main/gc?action=getPage",request); //從數據庫獲取當前頁面數據集合,傳值給pageBean對象 pageBean.setPageBean(gcDao.getRoleList(pageBean.getPageSize(), (pageBean.getCurrentPage() - 1) * (pageBean.getPageSize()))); return pageBean; }
4.servlet層,獲取前端傳的頁碼,返回給前端List集合(用於展示分頁的內容),pagebean對象(pagebean對象用於分頁jsp頁面)
//查詢全部並分頁 public String getPage(HttpServletRequest request, HttpServletResponse response){ //獲取前端傳來的當前頁碼 Integer currentPage = Integer.parseInt(request.getParameter("currentPage")); //獲取PageBean對象 PageBean<GradeAndClass> page = gcService.page(5, currentPage,request); List<GradeAndClass> pageBean = page.getPageBean(); request.setAttribute("page",page); request.setAttribute("gc",pageBean); return "/WEB-INF/views/main/allGCPage.jsp"; }
5.引用分頁jsp頁面,放在需要分頁的jsp頁面適當位置,引用的是分頁頁面
<%@include file="pageModel.jsp"%>
6.觸發分頁,傳參當前頁
<li><a data-href="/main/gcc?action=getPage¤tPage=1" data-title="課程管理" href="javascript:void(0)">全部課程</a></li>