Java-頁面分頁效果

分頁模板

1、首先建立一個工具包msq.utils

    新建兩個類

    NavigationTag.java

package msq.utils;
import java.io.IOException;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
/**
 * 顯示格式:首頁 上一頁 1 2 3 4 5下一頁 尾頁
 */
public class NavigationTag extends TagSupport {
	static final long serialVersionUID = 2372405317744358833L;
	private String bean = "page";//request 中用於保存Page<E> 對象的變量名,默認爲“page”
	private String url = null;//分頁跳轉的url地址,此屬性必須
	private int number = 5;//顯示頁碼數量	
	
	private int goPage = 1;//顯示要跳轉到的頁碼
	@Override
	public int doStartTag() throws JspException {		
		JspWriter writer = pageContext.getOut();
		
		HttpServletRequest request =(HttpServletRequest) pageContext.getRequest();		
		Page page = (Page) request.getAttribute(bean);
		if (page == null)return SKIP_BODY;
		url = resolveUrl(url, pageContext);		
		try {	       
			// 計算總頁數
			int pageCount = page.getTotalRecordCount() / page.getPageSize();
			if (page.getTotalRecordCount() % page.getPageSize() > 0) {
				pageCount++;
			}
			writer.print("<nav><ul class=\"pagination\">");
			
			//首頁鏈接路徑
			String homeUrl = append(url, "currentPage", 1);
			homeUrl = append(homeUrl, "pageSize", page.getPageSize());
			//末頁鏈接路徑
			String backUrl = append(url, "currentPage", pageCount);	
			backUrl = append(backUrl, "pageSize", page.getPageSize());
			// 顯示“首頁  上一頁”按鈕
			if (page.getCurrentPage() > 1) {
				String preUrl = append(url, "currentPage", page.getCurrentPage() - 1);
				preUrl = append(preUrl, "pageSize", page.getPageSize());
				writer.print("<li><a href=\"" + homeUrl + "\">" + "首頁</a></li>");
				writer.print("<li><a href=\"" + preUrl + "\">" + "上一頁</a></li>");
			} 
			else {
				writer.print("<li class=\"disabled\"><a href=\"#\">" + "首頁 </a></li>");
				writer.print("<li class=\"disabled\"><a href=\"#\">" + "上一頁 </a></li>");
			}
			// 顯示當前頁碼的前2頁碼和後兩頁碼
			// 若1 則 1 2 3 4 5, 若2 則 1 2 3 4 5, 若3 則1 2 3 4 5,
			// 若4 則 2 3 4 5 6 ,若10 則 8 9 10 11 12
			int number2=number/2;  //總共顯示number頁,分爲前後各一半
			int indexPage =1;
			if(page.getCurrentPage() - number2 <=0){  //處理前幾頁
				indexPage=1; //起始頁碼位置
			}else if(pageCount-page.getCurrentPage() <=number2){  //處理尾幾頁
				indexPage=pageCount-number+1;//從最後向前number-1頁
				if(indexPage<=0)indexPage=1;  //防止出現負數頁碼
			}else{
				indexPage= page.getCurrentPage() - number2; //中間頁碼
			}
			for (int i= 1;i <= number && indexPage <= pageCount;indexPage++,i++){
				if (indexPage == page.getCurrentPage()) {
					writer.print("<li class=\"active\"><a href=\"#\">" + indexPage+"<span class=\"sr-only\"></span></a></li>");
					continue;
				}
				String pageUrl = append(url, "currentPage", indexPage);
				pageUrl = append(pageUrl, "pageSize", page.getPageSize());
				writer.print("<li><a href=\"" + pageUrl + "\">" + indexPage + "</a></li>");
			}
			// 顯示“下一頁”按鈕
			if (page.getCurrentPage() < pageCount) {
				String nextUrl = append(url, "currentPage", page.getCurrentPage() + 1);
				nextUrl = append(nextUrl, "pageSize", page.getPageSize());
				writer.print("<li><a href=\"" + nextUrl + "\">" + "下一頁</a></li>");
				writer.print("<li><a href=\"" + backUrl + "\">" + "尾頁</a></li>");
			} else {
				writer.print("<li class=\"disabled\"><a href=\"#\">" + "下一頁</a></li>");
				writer.print("<li class=\"disabled\"><a href=\"#\">" + "尾頁</a></li>");
			}	
							
			writer.print("<li class=\"disabled\"><a  href='javascript:void(0)'>共" + pageCount + "頁" + page.getTotalRecordCount() + "條記錄</a></li>");
			writer.print("</nav>");
		} catch (IOException e) {
			e.printStackTrace();
		}
		return SKIP_BODY;
	}

	private String append(String url, String key, int value) {
		return append(url, key, String.valueOf(value));
	}
	/**
	 * 爲url 添加參數對兒
	 */
	private String append(String url, String key, String value) {		
		if (url == null || url.trim().length() == 0) {
			return "";
		}
		if (url.indexOf("?") == -1) {
			url = url + "?" + key + "=" + value;
		} else {
			if (url.endsWith("?")) {
				url = url + key + "=" + value;
			} else {
				url = url + "&amp;" + key + "=" + value;
			}
		}
		return url;
	}
	/**
	 * 爲url 添加翻頁請求參數
	 */
	private String resolveUrl(String url, 
        javax.servlet.jsp.PageContext pageContext) throws JspException {		
		Map params = pageContext.getRequest().getParameterMap();
		for (Object key : params.keySet()) {
			if ("currentPage".equals(key) || "pageSize".equals(key)){
				continue;
			}
			Object value = params.get(key);
			if (value == null){
				continue;
			}
			if (value.getClass().isArray()) {
				url = append(url, key.toString(), ((String[]) value)[0]);
			} else if (value instanceof String) {
				url = append(url, key.toString(), value.toString());
			}
		}
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public void setNumber(int number) {
		this.number = number;
	}
}    

   Page.java

package msq.utils;

import java.util.List;

public class Page<T> {		
	private Integer totalRecordCount;//總記錄數
	private Integer pageSize;//一頁幾條記錄
	private Integer currentPage;	//當前頁號
	private List<T> list;//當前頁的記錄list,傳遞給頁面
	
	public Integer getTotalRecordCount() {
		return totalRecordCount;
	}
	public void setTotalRecordCount(Integer total) {
		this.totalRecordCount = total;
	}
	public Integer getPageSize() {
		return pageSize;
	}
	public void setPageSize(Integer size) {
		this.pageSize = size;
	}
	public Integer getCurrentPage() {
		return currentPage;
	}
	public void setCurrentPage(Integer page) {
		this.currentPage = page;
	}
	public List<T> getList() {
		return list;
	}
	public void setList(List<T> rows) {
		this.list = rows;
	}
	
	

}

2、在工程的WebRoot/WEB-INF下新建標籤文件tle

    新建標籤commons.tld

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
                        "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
 <!-- 指定標籤庫的版本號 -->
 <tlib-version>1.0</tlib-version>
 <!-- 指定JSP的版本號 -->
 <jsp-version>1.2</jsp-version>
 <!-- 指定標籤庫的名稱 -->
 <short-name>common</short-name>
 <!-- 指定標籤庫的URI -->
 <uri>http://www.nynu.edu.cn/page</uri>
 <!-- 指定標籤庫的顯示名稱 -->
 <display-name>Common Tag</display-name>
 <!-- 指定標籤庫的描述 -->
 <description>Common Tag library</description>
 <!-- 註冊一個自定義標籤 -->
 <tag>
  <!-- 指定註冊的自定義標籤名稱 -->
  <name>page</name>
  <!-- 指定自定義標籤的標籤處理器類 -->
  <tag-class>msq.utils.NavigationTag</tag-class>
  <!-- 指定標籤體類型 -->
  <body-content>JSP</body-content>
  <!-- 描述 -->
  <description>create navigation for paging</description>
  <!-- 指定標籤中的屬性 -->
  <attribute>
   <!-- 指定屬性名稱 -->
   <name>url</name>
   <!-- 該屬性爲true時表示其指定是屬性爲必須屬性 -->
   <required>true</required>
   <!-- 該屬性用於指定能不能使用表達式來動態指定數據,爲true時表示可以 -->
   <rtexprvalue>true</rtexprvalue>
  </attribute>
  <attribute>
   <name>number</name>
   <rtexprvalue>true</rtexprvalue>
  </attribute>
 </tag>
</taglib>

3、在需要加分頁效果的頁面前加標籤註解

<%@ taglib prefix="mypage" uri="http://www.nynu.edu.cn/page" %>

4、在合適的位置放上分頁效果圖

url="與後臺連接到頁面地址"  

<mypage:page url="#"  ></mypage:page>

5、新建一個類CustomPo,當前類繼承CustomPo類

package msq.po;

public class CustomPo {
   Integer start;
   Integer pageSize;
public Integer getStart() {
	return start;
}
public void setStart(Integer start) {
	this.start = start;
}
public Integer getPageSize() {
	return pageSize;
}
public void setPageSize(Integer pageSize) {
	this.pageSize = pageSize;
}
   
   
}

6、在後臺的查找類中依次加上兩個參數

 controller包

@RequestParam(name="currentPage",defaultValue="1")Integer currentPage,//起始頁
@RequestParam(name="PageSize",defaultValue="10")Integer PageSize,//頁大小

將原先用來儲存數據的List<T> 改成 Page<T>

在查詢的基礎上分頁只需要再加一個參數即可

7、更改對應的sql語句 ,加上限制條件

<!-- 查找的分頁 -->
    <sql id="sqlLimit">
      <if test="start!=null and pageSize!=null">
         limit #{start},#{pageSize}
      </if>
    </sql>

 

最後效果

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