使用SpringMVC+hibernate實現Bootstrap分頁

package com.org.utils.taglib;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class PageTag extends SimpleTagSupport {

	// 提交URL的一個約定的格式: pageSerlvet?pageIndex={0}
	private static final String TEG = "{0}";

	private String parms;
	// 當前頁數
	private int pageIndex;
	// 一頁顯示的數量
	private int pageSize;
	// 記錄總條數
	private int recordCount;
	// 提交的URL
	private String submitUrl;

	// 定義總共的頁數
	private int pageCount;
	
	//每頁顯示的實際數量
	private int  pageRealSize;

	public int getPageRealSize() {
		return pageRealSize;
	}

	public void setPageRealSize(int pageRealSize) {
		this.pageRealSize = pageRealSize;
	}

	/**
	 * Pre前一頁
	 * Next下一頁
	 * «向←左left
	 * »向→右right
	 * 
	 */
	public void doTag() throws JspException, IOException {

		StringBuilder pageWrapStr = new StringBuilder();
		StringBuffer  pageNumberStr = new StringBuffer();
		if(parms==null || parms.isEmpty() || parms.trim().length()==0){
			
		}else{
			submitUrl+="&"+this.getParms();
		}
		
		// 先判斷記錄總條數
		if (recordCount > 0) {
			// 計算出總共的頁數
			pageCount = (recordCount % pageSize == 0) ? (recordCount / pageSize)
					: (recordCount / pageSize) + 1;
			// 判斷總頁數與當前頁數的關係
			pageIndex = (pageIndex >= pageCount) ? pageCount : pageIndex;
			
			//計算該頁實際顯示記錄數
			if(pageIndex<pageCount){
				pageRealSize=pageSize;
			}else{
				pageRealSize=recordCount-pageSize*(pageIndex-1);
			}
			
			pageWrapStr.append(" <div class='page-number-strip' style='height:62px;'> ");//page-number-strip
			
			// 確定上一頁與下頁是否加鏈接
			String tempUrl1 = submitUrl.replace(TEG, String.valueOf(1));
			pageNumberStr.append("<ul class='pagination'>");//添加boostrap分頁樣式
			
			pageNumberStr.append("<li><a href='" + tempUrl1 + "'>&laquo;</a> </li>");
			if (pageIndex == 1) { // 當前頁數爲第一頁時
				pageNumberStr.append("<li><span>Pre</span> </li>"); // 頭
				// 中間
				calculatePage(pageNumberStr);
				// 尾
				if (pageCount == 1) {
					pageNumberStr.append("<li><span>Next</span> </li>");
				} else {
					String tempUrl = submitUrl.replace(TEG,String.valueOf(pageIndex + 1));
					pageNumberStr.append("<li><a href='" + tempUrl + "'>Next</a> </li>");
				}
			} else if (pageIndex == pageCount) { // 當前頁數爲最後一頁時
				String tempUrl = submitUrl.replace(TEG, String.valueOf(pageIndex - 1));
				pageNumberStr.append("<li><a href='" + tempUrl + "'>Pre</a> </li>");
				// 中間
				calculatePage(pageNumberStr);
				// 最後一頁
				pageNumberStr.append("<li><span>Next</span>");
			} else { // 當前頁數爲中間時
				String tempUrl = submitUrl.replace(TEG, String.valueOf(pageIndex - 1));
				pageNumberStr.append("<li><a href='" + tempUrl + "'>Pre</a> </li>");
				// 中間
				calculatePage(pageNumberStr);
				// 尾
				tempUrl = submitUrl.replace(TEG, String.valueOf(pageIndex + 1));
				pageNumberStr.append("<li><a href='" + tempUrl + "'>Next</a> </li>");
			}
			String tempUrl2 = submitUrl.replace(TEG, String.valueOf(pageCount));
			pageNumberStr.append("<li><a href='" + tempUrl2 + "'>&raquo;</a> </li>");
			pageNumberStr.append("<li>&nbsp;&nbsp;跳到<input type='text' id='page_number_id' size='1' value='"+pageIndex+"' sytle='margin-top:5px;'/>頁&nbsp;&nbsp;</li>");
			pageNumberStr.append("<li><a>" + pageRealSize + "/" + recordCount + "items &nbsp;of &nbsp;p" + pageCount + "&nbsp;</a></li>");
			pageNumberStr.append("<li><input type='button' value='確定' class='btn-page-confirm' style='color:#fff'  οnclick='doJumpPage();'/></li>");
			pageNumberStr.append("</ul>");
			
			// 加上跳轉信息\顯示信息
			pageWrapStr.append(pageNumberStr.toString());
			
			pageWrapStr.append(" </div> ");
			
			
			// 第二行拼接分頁提示信息/ 計算出顯錄的開始記錄條數與結束的記錄條數
			int startNum = (pageIndex - 1) * pageSize + 1;
			int endNum = (pageIndex == pageCount) ? recordCount : pageIndex * pageSize;

			// 最後拼接JavaScript代碼
			pageWrapStr.append("<script type=\"text/javascript\">");
		
			
			pageWrapStr.append("var doJumpPage = function(){");
			pageWrapStr.append("var pageCount = " + pageCount + ";");
			pageWrapStr.append("var url = '" + submitUrl + "';");
			pageWrapStr.append("var regu='^[0-9]+$'; var re=new RegExp(regu);");
			pageWrapStr.append("var num = document.getElementById('page_number_id').value;");
			pageWrapStr.append("if(num.search(re)==-1){alert('請輸入整數!'); return false}");
			pageWrapStr.append("if (isNaN(num) ||  num < 1 || num > pageCount){alert('請輸入1-"+ pageCount + "範圍內的頁碼!');return false;}");
			pageWrapStr.append("var tempUrl = url.replace('" + TEG + "', num);");
			pageWrapStr.append("window.location.href = tempUrl;");
			pageWrapStr.append("}</script>");
			//num != Integer.parseInt(num) ||
		}
		// 如果記錄條數小於等於0,直接輸出
		else {
			pageWrapStr.append("<table align='center' style='font-size:14px;'><tr><td>");
			pageWrapStr.append("總共<span style='color:red;'>0</span>條記錄,當前顯示0-0條記錄。");
			pageWrapStr.append("</td></tr></table>");
			
		}
		
		// 輸出
		this.getJspContext().getOut().println(pageWrapStr.toString());
	}

	/**
	 * 計算中間部分 [1]...[2][3]...[100]
	 * 
	 * @param buder
	 */
	private void calculatePage(StringBuffer buder) {
		// 總頁數小於等於10
		if (pageCount <= 10) {
			for (int i = 1; i <= pageCount; i++) {
				// 判斷哪一個是當前頁
				if (i == pageIndex) {
					buder.append("<li><span style='color:red;' >" + i + "</span> </li>");
				} else {
					String tempUrl = submitUrl.replace(TEG, String.valueOf(i));
					buder.append("<li><a href='" + tempUrl + "'>" + i + "</a> </li>");
				}
			}
		} else { // 三種情況: 靠近第一頁\靠近最後一頁\中間
			if (pageIndex <= 8) { // 靠近第一頁
				for (int i = 1; i < 10; i++) {
					// 判斷哪一個是當前頁
					if (i == pageIndex) {
						buder.append("<li><span style='color:red;' >" + i + "</span> </li>");
					} else {
						String tempUrl = submitUrl.replace(TEG, String.valueOf(i));
						buder.append("<li><a href='" + tempUrl + "'>" + i + "</a> </li>");
					}
				}
				// 後面部分加上更多
				String tempUrl = submitUrl.replace(TEG, String.valueOf(pageCount));
				buder.append("<li><a href='javascript:void(0);'>...</a></li>").append("<li><a href='" + tempUrl + "'>" + pageCount + "</a> </li>");
			} else if (pageIndex > pageCount - 8) { // 靠近最後一頁
				// 前面部分加上更多[1]...
				String tempUrl = submitUrl.replace(TEG, String.valueOf(1));
				buder.append("<li><a href='" + tempUrl + "'>1</a> </li>").append("<li><a href='javascript:void(0);'>...</a></li>");
				for (int i = pageCount - 8; i <= pageCount; i++) {
					if (i == pageIndex) {
						buder.append("<li><span style='color:red;' >" + i + "</span> </li>");
					} else {
						tempUrl = submitUrl.replace(TEG, String.valueOf(i));
						buder.append("<li><a href='" + tempUrl + "'>" + i + "</a> </li>");
					}
				}
			} else { // 中間
						// 前面部分加上更多[1]...
				String tempUrl = submitUrl.replace(TEG, String.valueOf(1));
				buder.append("<li><a href='" + tempUrl + "'>1</a> </li>").append("<li><a href='javascript:void(0);'>...</a></li>");
				for (int i = pageIndex - 4; i <= pageIndex + 4; i++) {
					if (i == pageIndex) {
						buder.append("<li><span style='color:red;' >" + i + "</span> </li>");
					} else {
						tempUrl = submitUrl.replace(TEG, String.valueOf(i));
						buder.append("<li><a href='" + tempUrl + "'>" + i + "</a> </li>");
					}
				}
				// 後面部分加上更多
				tempUrl = submitUrl.replace(TEG, String.valueOf(pageCount));
				buder.append("<li><a href='javascript:void(0);'>...</a></li>").append("<li><a href='" + tempUrl + "'>" + pageCount + "</a></li>");
			}
		}
	}

	/** setter and getter method */
	public int getPageIndex() {
		return pageIndex;
	}

	public void setPageIndex(int pageIndex) {
		this.pageIndex = (pageIndex < 1) ? 1 : pageIndex;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getRecordCount() {
		return recordCount;
	}

	public void setRecordCount(int recordCount) {
		this.recordCount = recordCount;
	}

	public String getSubmitUrl() {
		return submitUrl;
	}

	public void setSubmitUrl(String submitUrl) {
		this.submitUrl = submitUrl;
	}

	public String getParms() {
		
		StringBuffer ps=new StringBuffer();
		if(parms!=null && parms.length()>0){
			//分離參數 A=b
			String[] parmsArr=parms.split("&");
			for(int i=0;i<parmsArr.length;i++){ 
				String parmstemp=parmsArr[i];
				String[] parmsEqArr=parmstemp.split("=");
				//分離參數 鍵 值 
				try {
					ps.append(i > 0 ? "&" : "");
					ps.append(parmsEqArr[0]).append("=");
					if(parmsEqArr.length>1){
						ps.append( URLEncoder.encode(parmsEqArr[1],"UTF-8"));
					}
				} catch (UnsupportedEncodingException e) {
					return "";
				}	
			}
		}
		
		return ps.toString();
	}

	public void setParms(String parms) {
		this.parms = parms;
	}

}

 源代碼

 

http://download.csdn.net/detail/jilongliang/7302995

搭建請參考

http://jilongliang.iteye.com/blog/2061557


 

 

 

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