java實現分頁查詢

一.抽取頁面模型和頁碼部分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}&currentPage=1">首頁</a>
	    		<a href="${pageContext.request.contextPath}/${page.url}&currentPage=${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}&currentPage=${i.index}">${i.index}</a>
    			</c:if>
    		</c:forEach>
    		<c:if test="${page.currentPage != page.totalPage}">
	    		<a href="${pageContext.request.contextPath}/${page.url}&currentPage=${page.nextPage}">下一頁</a>
	    		<a href="${pageContext.request.contextPath}/${page.url}&currentPage=${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}&currentPage="+page;
    			}
    		</script>
    	</div>
    	<%--分頁顯示的結束--%>

二.獲得頁面模型流程

①在業務層獲取要訪問的當前頁數(currentPage)、記錄總數(totalRecords)、每頁顯示記錄數(pageSize)封裝到一個Page中

②根據Page中的數據開始索引(startIndex)和每頁顯示記錄數(pageSize)去查詢數據庫並返回list

③將list放入Page中並設置Page的Url屬性作爲頁碼的跳轉路徑

⑤將該Page返回web層並放入請求域中轉發到數據顯示頁面進行讀取

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章