一.抽取頁面模型和頁碼部分jsp
①按照下圖紅色選框中的內容抽取頁面實體類
import java.util.List;
/**
* 存放分頁相關的數據
* @param <T>
*
*/
public class Page<T> {
//基本屬性
private int currentPage;//當前頁數,由用戶指定
private int pageSize = 5 ;//每頁顯示的條數,固定的
private int totalRecords;//總記錄條數,數據庫查出來的
private int totalPage;//總頁數,計算出來的
private int startIndex;//每頁開始記錄的索引,計算出來的
private int prePage;//上一頁
private int nextPage;//下一頁
private int startPage;//開始頁碼
private int endPage;//結束頁碼
private List<T> list;//已經分好頁的結果集,該list中只有10條記錄
//點擊頁碼要訪問的url
private String url;
//要想使用我的分頁,必須給我三個參數。一個是要看哪一頁,另一個是總記錄條數和每頁顯示幾條記錄
public Page(int currentPage,int totalRecords,int pageSize){
this.currentPage = currentPage;
this.totalRecords = totalRecords;
this.pageSize=pageSize;
//計算查詢記錄的開始索引
startIndex = (currentPage-1)*pageSize;
//計算總頁數
totalPage = totalRecords%pageSize==0?(totalRecords/pageSize):(totalRecords/pageSize+1);
//設置每頁顯示九個頁碼
startPage = currentPage - 4; //5
endPage = currentPage + 4; //13
//設置前一頁與後一頁
getPrePage();
getNextPage();
//看看總頁數夠不夠9頁
if(totalPage>9){
//超過了9頁
if(startPage < 1){
startPage = 1;
endPage = startPage+8;
}
if(endPage > totalPage){
endPage = totalPage;
startPage = endPage-8;
}
}else{
//不夠9頁
startPage = 1;
endPage = totalPage;
}
}
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 getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getStartIndex() {
return startIndex;
}
public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}
//不提供getPrePage()
public int getPrePage() {
this.prePage = currentPage-1;
if(prePage<1){
prePage = 1;
}
return prePage;
}
//不提供setNextPage()
public int getNextPage() {
this.nextPage = currentPage+1;
if(nextPage>totalPage){
nextPage = totalPage;
}
return nextPage;
}
public int getStartPage() {
return startPage;
}
public void setStartPage(int startPage) {
this.startPage = startPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
②.將底部頁碼內容放置在單獨的一個jsp中
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%--分頁顯示的開始 --%>
<div style="text-align:center"> 共${page.totalPage}頁/第${page.currentPage}頁
<c:if test="${page.currentPage != 1 }">
<a href="${pageContext.request.contextPath}/${page.url}¤tPage=1">首頁</a>
<a href="${pageContext.request.contextPath}/${page.url}¤tPage=${page.prePage}">上一頁</a>
</c:if>
<%--顯示的頁碼,使用forEach遍歷顯示的頁面 --%>
<c:forEach begin="${page.startPage}" end="${page.endPage}" varStatus="i">
<c:if test="${i.index == page.currentPage }">
<span>${page.currentPage}</span>
</c:if>
<c:if test="${i.index != page.currentPage }">
<a href="${pageContext.request.contextPath}/${page.url}¤tPage=${i.index}">${i.index}</a>
</c:if>
</c:forEach>
<c:if test="${page.currentPage != page.totalPage}">
<a href="${pageContext.request.contextPath}/${page.url}¤tPage=${page.nextPage}">下一頁</a>
<a href="${pageContext.request.contextPath}/${page.url}¤tPage=${page.totalPage}">末頁</a>
</c:if>
<input type="text" id="page" name="page" size="1"/><input type="button" value="前往" onclick="jump()" />
<script type="text/javascript">
function jump(){
var totalpage = ${page.totalPage};
var page = document.getElementById("page").value;
//判斷輸入的是一個數字
var reg =/^[1-9][0-9]{0,1}$/;
if(!reg.test(page)){
//不是一個有效數字
alert("請輸入符合規定的數字");
return ;
}
//判斷輸入的數字不能大於總頁數
if(parseInt(page)>parseInt(totalpage)){
//超過了總頁數
alert("不能大於總頁數");
return;
}
//轉向分頁顯示的Servlet
window.location.href="${pageContext.request.contextPath}/${page.url}¤tPage="+page;
}
</script>
</div>
<%--分頁顯示的結束--%>
二.獲得頁面模型流程
①在業務層獲取要訪問的當前頁數(currentPage)、記錄總數(totalRecords)、每頁顯示記錄數(pageSize)封裝到一個Page中
②根據Page中的數據開始索引(startIndex)和每頁顯示記錄數(pageSize)去查詢數據庫並返回list
③將list放入Page中並設置Page的Url屬性作爲頁碼的跳轉路徑
⑤將該Page返回web層並放入請求域中轉發到數據顯示頁面進行讀取