欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSP自定义分页标签TAG

程序员文章站 2022-07-07 23:28:50
首先我们需要在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代码

"${pageNo}" url="your_url" totalSum="${totalSum}" showPage="10" pageSize="12"/>