JSP自訂分頁標籤TAG

來源:互聯網
上載者:User

標籤:jsp   分頁   tags   

首先我們需要在WEB-INF/tld/目錄下建立page.tld檔案

<?xml version="1.0" encoding="ISO-8859-1"?><taglib><tlib-version>1.0</tlib-version><jsp-version>1.2</jsp-version><short-name>page</short-name><uri>http://www.kevin.com/taglibs/page</uri><tag><name>htmlPage</name><tag-class>com.lss.common.tag.PageTag</tag-class><body-content>JSP</body-content><description>htmlPage Tag</description><attribute><name>pageNo</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute><attribute><name>pageSize</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute><attribute><name>totalSum</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute><attribute><name>url</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute><attribute><name>showPage</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute></tag></taglib>

package com.lss.common.tag;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.TagSupport;import com.lss.common.page.HtmlPage;import com.lss.common.page.Page;import com.lss.common.page.VariablePage;/** * 分頁處理標籤 *  * @description * @DATE 2012-3-11下午09:08:46 */public class PageTag extends TagSupport {private int pageNo;private int pageSize = 10;private int totalSum;private int showPage = 10;private String url;public int getPageNo() {return pageNo;}public void setPageNo(int pageNo) {this.pageNo = pageNo;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getTotalSum() {return totalSum;}public void setTotalSum(int totalSum) {this.totalSum = totalSum;}public int getShowPage() {return showPage;}public void setShowPage(int showPage) {this.showPage = showPage;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}@Overridepublic int doEndTag() throws JspException {if (pageSize == 0) {return TagSupport.SKIP_PAGE;// 不顯示分頁} else if (pageSize > totalSum) {return TagSupport.SKIP_BODY;// 不顯示分頁}JspWriter out = pageContext.getOut();try {if (url.indexOf(";jsessionid=") == -1) {if (url.indexOf("?") == -1) {url += ";jsessionid=" + pageContext.getSession().getId() + "?pageNo=";} else {url = url.replaceFirst("\\?", ";jsessionid=" + pageContext.getSession().getId() + "?");if (url.indexOf("pageNo=") == -1) {url += "&pageNo=";}}}url = pageContext.getServletContext().getContextPath() + url;VariablePage variablePage = new VariablePage(pageNo, totalSum, pageSize, url);variablePage.setShowPageNum(showPage);Page page = new HtmlPage(variablePage);out.print(page.getFirstNo() + "  " + page.getBackpageNum() + "  " + page.pagination() + "  " + page.getNextpageNum() + "  " + page.getLastNo());} catch (IOException ex) {ex.printStackTrace();}return super.doEndTag();}@Overridepublic void release() {url = null;pageNo = 0;totalSum = 0;pageSize = 10;super.release();}private static final long serialVersionUID = -2642907859641024483L;}

/** * HTML 分頁類 *  * @description * @DATE 2012-3-11下午10:33:14 */public class HtmlPage extends Page {public HtmlPage(VariablePage variablePage) {super(variablePage);}public String pagination() {String printNo = "";// 如果已分頁;並且頁數小於等於要顯示的頁數if (variablePage.totalPage > 1 && variablePage.totalPage <= variablePage.showPageNum) {return displayAll();// 如果分頁數:大於顯示的頁碼數} else if (variablePage.totalPage > 1 && variablePage.totalPage > variablePage.showPageNum) {if (variablePage.pageNo == 1) {// 當前頁等於第一頁return fromFirstPagePrint();} else if (variablePage.pageNo == variablePage.totalPage) {// 當前頁等於最後一頁return fromLastPagePrint();} else {// 如果當前頁:即不是首頁也不是尾頁if (variablePage.showPageNum % 2 == 0) {// 可以平分頁碼int print$No = variablePage.showPageNum / 2;if (variablePage.pageNo >= print$No) {int index$No = variablePage.pageNo - print$No;if (variablePage.pageNo + print$No >= variablePage.totalPage) {return fromLastPagePrint();} else {if (index$No == 0)index$No = 1;for (int i = index$No; i < (variablePage.showPageNum + index$No); i++) {if (i == variablePage.pageNo) {// 如果是當前頁:不添加串連URLprintNo += (i + variablePage.split);} else {printNo += (buildA(variablePage, i) + variablePage.split);}}}} else {return fromFirstPagePrint();}} else {// 列印頁數不是偶數時:int print$No = variablePage.showPageNum / 2 + 1;if (variablePage.pageNo >= print$No && variablePage.pageNo + print$No < variablePage.totalPage) {int index$No = variablePage.pageNo - print$No + 1;for (int i = index$No; i < variablePage.showPageNum + index$No; i++) {if (i == variablePage.pageNo) {// 如果是當前頁:不添加串連URLprintNo += (i + variablePage.split);} else {printNo += (buildA(variablePage, i) + variablePage.split);}}} else if (variablePage.pageNo <= print$No) {// 從第一頁開始return fromFirstPagePrint();} else {return fromLastPagePrint();}}}return (printNo);} else {return "1";}}public String getBackpageNum() {if (variablePage.pageNo <= 1) {return buildSpan("上一頁", variablePage);} else {return buildA("上一頁", (variablePage.url + (variablePage.pageNo - 1)));}}public String getNextpageNum() {if (variablePage.pageNo >= variablePage.totalPage) {return buildSpan("下一頁", variablePage);} else {return buildA("下一頁", variablePage.url + (variablePage.pageNo + 1));}}public String buildSpan(String text, VariablePage variablePage) {return "<span style=\"color:gray;\">" + text + "</span>";}public String buildA(String text, String url) {return "<a href=\"" + url + "\">" + text + "</a>";}public String buildA(VariablePage variablePage, int num) {return ("<a href=\"" + variablePage.url + num + "\">" + num + "</a>");}}

public abstract class Page {protected VariablePage variablePage;public Page(VariablePage variablePage) {this.variablePage = variablePage;calculateTotalPage();}public int getStartIndex() {return (getValidpageNum() - 1) * variablePage.pageSize;}public String getBackpageNum() {if (variablePage.pageNo <= 1) {return buildSpan("上一頁", variablePage);} else {return buildA("上一頁", variablePage.getUrl() + (variablePage.pageNo - 1));}}public String getNextpageNum() {if (variablePage.pageNo >= variablePage.totalPage) {return buildSpan("下一頁", variablePage);} else {return buildA("下一頁", variablePage.getUrl() + (variablePage.pageNo + 1));}}/** * 計算總頁數 */private void calculateTotalPage() {if (variablePage.totalSum % variablePage.pageSize == 0) {variablePage.totalPage = variablePage.totalSum / variablePage.pageSize;} else {variablePage.totalPage = variablePage.totalSum / variablePage.pageSize + 1;}if (variablePage.totalPage < variablePage.pageNo) {variablePage.pageNo = variablePage.totalPage;} else if (variablePage.pageNo < 1) {variablePage.pageNo = 1;}}protected String displayAll() {StringBuilder sBuilder = new StringBuilder(10);sBuilder.append(variablePage.split);for (int i = 1; i <= variablePage.totalPage; i++) {if (i == variablePage.pageNo) {sBuilder.append(i + variablePage.split);} else {sBuilder.append(buildA(variablePage, i) + variablePage.split);}}return sBuilder.toString();}/** * 抽象出分頁方法 *  * @return */public abstract String pagination();/** * 實現從第一頁開始列印 *  * @return */protected final String fromFirstPagePrint() {StringBuffer buffer = new StringBuffer(100);for (int i = 1; i <= variablePage.showPageNum; i++) {if (i == variablePage.pageNo) {// 如果是當前頁:不添加串連URLbuffer.append(i + variablePage.split);} else {buffer.append(buildA(variablePage, i) + variablePage.split);}}return buffer.toString();}/** * 實現從最後一頁開始列印 *  * @return */protected final String fromLastPagePrint() {StringBuffer buffer = new StringBuffer(100);int startPage = variablePage.totalPage - (variablePage.showPageNum - 1);for (int i = startPage; i <= variablePage.totalPage; i++) {if (i == variablePage.pageNo) {// 如果是當前頁:不添加串連URLbuffer.append(i + variablePage.split);} else {buffer.append(buildA(variablePage, i) + variablePage.split);}}return buffer.toString();}public String getFirstNo() {if (isExistsPagination()) {return buildA("首頁", variablePage.url + 1);} else {return buildSpan("首頁", variablePage);}}/** * 判斷是否存在分頁 *  * @return */private boolean isExistsPagination() {if (variablePage.totalSum > 1 && variablePage.totalPage > 1) {return true;}return false;}public String getLastNo() {if (isExistsPagination()) {return buildA("尾頁", variablePage.url + variablePage.totalPage);} else {return buildSpan("尾頁", variablePage);}}protected int getValidpageNum() {if (variablePage.totalPage < variablePage.pageNo) {return variablePage.pageNo = variablePage.totalPage;} else if (variablePage.pageNo < 1) {return variablePage.pageNo = 1;} else {return variablePage.pageNo;}}public VariablePage getPageContant() {return this.variablePage;}public abstract String buildSpan(String text, VariablePage variablePage);public abstract String buildA(String text, String url);public abstract String buildA(VariablePage variablePage, int num);public String printModifyPageSize(int pageSize){StringBuilder builder=new StringBuilder(100);builder.append("每頁<input type='text' id='pageSize' style='width:20px' maxlength='2' name='pageSize'");if(pageSize>0){builder.append(" value='"+pageSize+"' ");}builder.append("/>條");return builder.toString();}}

/** * 分頁基礎變數 *  * @description * @DATE 2012-3-11下午10:34:00 */public class SimpleVariable {/** * 顯示頁碼 */protected int showPageNum = 10;/** * 串連URL */protected String url = null;/** * 當前頁碼 */protected int pageNo = 1;/** * 總頁碼 */protected int totalPage = 1;/** * 總條數 */protected int totalSum = 0;/** * 每頁顯示條數 */protected int pageSize = 10;public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public int getTotalPage() {return totalPage;}public void setTotalPage(int totalPage) {this.totalPage = totalPage;}public int getTotalSum() {return totalSum;}public void setTotalSum(int totalSum) {this.totalSum = totalSum;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getShowPageNum() {return showPageNum;}public void setShowPageNum(int showPageNum) {this.showPageNum = showPageNum;}public int getPageNo() {return pageNo;}public void setPageNo(int pageNo) {this.pageNo = pageNo;}}

/** * 分頁變數 *  * @description * @DATE 2012-3-11下午10:34:08 */public class VariablePage extends SimpleVariable {protected String split = "  ";protected String style = "class='page'";public VariablePage(int pageNo, int totalSum, int pageSize, String url) {pageNo = pageNo < 1 ? 1 : pageNo;super.pageNo = pageNo;this.totalSum = totalSum;this.url = url;this.pageSize = pageSize;}public VariablePage(int pageNum, int totalSum, String url) {pageNum = pageNum < 1 ? 1 : pageNum;super.pageNo = pageNum;this.totalSum = totalSum;this.url = url;}public String getSplit() {return split;}public void setSplit(String split) {this.split = split;}}
#需要使用該分頁標籤的JSP 使用方法如下:

JSP 頭部引入

<%@tagliburi="http://www.kevin.com/taglibs/page"prefix="page"%>

使用以下標籤產生分頁HTML代碼

<page:htmlPagepageNo="${pageNo}"url="your_url" totalSum="${totalSum}"showPage="10"pageSize="12"/>



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.