JSP自定义分页标签TAG
程序员文章站
2022-03-13 11:00:18
首先我们需要在WEB-INF/tld/目录下创建page.tld文件
1.0
jsp-version>1.2
page
https://www.kevin.com/t...
首先我们需要在WEB-INF/tld/目录下创建page.tld文件
1.0 jsp-version>1.2 page https://www.kevin.com/taglibs/page htmlPage com.lss.common.tag.PageTag JSP htmlPage Tag pageNo false true pageSize false true totalSum true true url true true showPage false true
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; } @Override public 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(); } @Override public 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 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 = print$No && variablePage.pageNo + print$No = variablePage.totalPage) { return buildSpan("下一页", variablePage); } else { return buildA("下一页", variablePage.url + (variablePage.pageNo + 1)); } } public String buildSpan(String text, VariablePage variablePage) { return "" + text + ""; } public String buildA(String text, String url) { return "" + text + ""; } public String buildA(VariablePage variablePage, int num) { return ("" + num + ""); } }
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 = 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 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 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#需要使用该分页标签的JSP 使用方法如下:
JSP 头部引入
"https://www.kevin.com/taglibs/page" prefix="page" %>
使用以下标签生成分页HTML代码