前端需要傳遞的參數:pageNumber(頁碼,必填默認爲1),pageSize(每頁顯示的記錄數)
後臺的封裝Page類爲以下代碼:
public class Pager<T> {
private List<T> list; // 對象記錄結果集
private int total = 0; // 總記錄數
private int limit = 10; // 每頁顯示記錄數
private int start = 0;// 起始點
private int pages = 1; // 總頁數
private int pageNumber = 1; // 當前頁
private boolean isFirstPage = false; // 是否爲第一頁
private boolean isLastPage = false; // 是否爲最後一頁
private boolean hasPreviousPage = false; // 是否有前一頁
private boolean hasNextPage = false; // 是否有下一頁
private int navigatePages = 8; // 導航頁碼數
private int[] navigatePageNumbers; // 所有導航頁號
public Pager() {
}
public Pager(int total, int pageNumber) {
init(total, pageNumber, limit);
}
public Pager(int total, int pageNumber, int limit) {
init(total, pageNumber, limit);
}
private void init(int total, int pageNumber, int limit) {
// 設置基本參數
this.total = total;
this.limit = limit;
this.pages = (this.total - 1) / this.limit + 1;
// 根據輸入可能錯誤的當前號碼進行自動糾正
if (pageNumber < 1) {
this.pageNumber = 1;
} else if (pageNumber > this.pages) {
this.pageNumber = this.pages;
} else {
this.pageNumber = pageNumber;
}
this.start = (this.pageNumber - 1) * this.limit;
// 基本參數設定之後進行導航頁面的計算
calcNavigatePageNumbers();
// 以及頁面邊界的判定
judgePageBoudary();
}
/**
* 計算導航頁
*/
private void calcNavigatePageNumbers() {
// 當總頁數小於或等於導航頁碼數時
if (pages <= navigatePages) {
navigatePageNumbers = new int[pages];
for (int i = 0; i < pages; i++) {
navigatePageNumbers[i] = i + 1;
}
} else { // 當總頁數大於導航頁碼數時
navigatePageNumbers = new int[navigatePages];
int startNum = pageNumber - navigatePages / 2;
int endNum = pageNumber + navigatePages / 2;
if (startNum < 1) {
startNum = 1;
// (最前navPageCount頁
for (int i = 0; i < navigatePages; i++) {
navigatePageNumbers[i] = startNum++;
}
} else if (endNum > pages) {
endNum = pages;
// 最後navPageCount頁
for (int i = navigatePages - 1; i >= 0; i--) {
navigatePageNumbers[i] = endNum--;
}
} else {
// 所有中間頁
for (int i = 0; i < navigatePages; i++) {
navigatePageNumbers[i] = startNum++;
}
}
}
}
/**
* 判定頁面邊界
*/
private void judgePageBoudary() {
isFirstPage = pageNumber == 1;
isLastPage = pageNumber == pages && pageNumber != 1;
hasPreviousPage = pageNumber != 1;
hasNextPage = pageNumber != pages;
}
<span style="white-space:pre"> </span>//省去get()set()方法
}
後臺先統計要被展示的總記錄條數,total,例如:
// 總記錄數(根據不同框架代碼樣式有所不同,總之就是要獲取需要查詢的記錄總數)
int total = XXXDAO.getXXXTotal(params);
獲取總記錄數後即可通過以下代碼生成page類
//total(記錄總數),page(查詢頁碼,前端傳遞獲得),pageSize(每頁顯示記錄數,前端獲取亦可,後端定義亦可),XXX表示展示需要封裝的類(例如:需要展示User信息,XXX即U//SER類)
Pager<XXX> pager = new Pager<XXX>(total,page,pageSize);
在sql語句中加入查詢的開始條數以及結束條數字段,這兩個字段可以從以下代碼獲取
pager.getStart();//開始記錄數
pager.getLimit();//結束記錄數
select * from xxx limit #{start},#{limit}
將結果集放入page中
pager.setList(list);
return pager;
<span style="white-space:pre"> </span><div class="am-cf">
<span style="white-space:pre"> </span>共 ${pager.total} 條記錄,當前${pager.pageNumber}頁
<span style="white-space:pre"> </span><div class="am-fr">
<ul class="am-pagination">
<c:if test="${pager.hasPreviousPage}">
<li><a οnclick="pageDataCountForCUser('${pager.pageNumber-1}')">«</a></li>
</c:if>
<c:if test="${!pager.hasPreviousPage} ">
<li><a href="javascript:">«</a></li>
</c:if>
<c:forEach items="${pager.navigatePageNumbers}" var="num">
<li><a οnclick="pageDataCountForCUser('${num}') " ${pager.pageNumber == num ? "style='background-color: #4086CB;co<span style="white-space:pre"> </span>lor: white;font-weight: bold'" : "" }>${num}</a></li>
</c:forEach>
<c:if test="${pager.hasNextPage}">
<li><a οnclick="pageDataCountForCUser('${pager.pageNumber+1}')">»</a></li>
</c:if>
<c:if test="${!pager.hasNextPage}">
<li><a href="javascript:void(0)">»</a></li>
</c:if>
</ul>
</div>
</div>