一个简单的分页类

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 分页类
 * @author doowan
 */
public class Paginator{
	private int interval = 10; //在页面中显示的分页按钮数量(包含当前页)
	private int currentPage = 1; //当前页数
	private int totalPage = 0; //总页数
	private String name = "page"; //参数名
	private String url; //生成链接地址的url
	private String pageSpaceHolder; //页数替换标示
	private String urlSpaceHolder; //url替换标示
	private String current;  //选中分页的模板
	private String other;   //未选中分页的模板
	
	//初始化一个默认的Paginator,其他值需自行绑定
	public Paginator(int totalPage, int currentPage){
		this.totalPage = totalPage;
		this.currentPage = currentPage;
	}
	
	public Paginator(int totalPage, int currentPage, String url){
		this(totalPage, currentPage, url, "{s}", "{u}");
	}
	
	public Paginator(int totalPage, int currentPage, String url, String pageSpaceHolder, String urlSpaceHolder){
		this(totalPage, currentPage, url, pageSpaceHolder, urlSpaceHolder, 
				"<span class='paginator-current'>"+pageSpaceHolder+"</span>",
				"<a href='"+ urlSpaceHolder + "' class='paginator-page'>" + pageSpaceHolder + "</a>");
	}
	
	public Paginator(int totalPage, int currentPage, String url, String pageSpaceHolder, String urlSpaceHolder, String current, String other){
		this(totalPage, currentPage);
		this.url = url;
		this.setPageSpaceHolder(pageSpaceHolder);
		this.setUrlSpaceHolder(urlSpaceHolder);
		this.setCurrent(current);
		this.setOther(other);
	}
	
	//生成模板
	public StringBuffer generate(){
		StringBuffer html = new StringBuffer();
		int start = this.getBeginPoint();
		int end = this.getEndPoint(start);
		if(start > 1){
			html.append(this.generateOther(1, "first"));
		}
		for(; start<=end; start++){
			if(this.currentPage == start){
				html.append(this.generateCurrent());
			}else{
				html.append(this.generateOther(start, String.valueOf(start)));
			}
		}
		if(end < this.totalPage){
			html.append(this.generateOther(this.totalPage, "last"));
		}
		return html;
	}
	
	public void setInterval(int interval){
		this.interval = interval;
	}
	
	public int getInterval(){
		return this.interval;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPageSpaceHolder() {
		return pageSpaceHolder;
	}

	public void setPageSpaceHolder(String pageSpaceHolder) {
		this.pageSpaceHolder = pageSpaceHolder;
	}

	public String getUrlSpaceHolder() {
		return urlSpaceHolder;
	}

	public void setUrlSpaceHolder(String urlSpaceHolder) {
		this.urlSpaceHolder = urlSpaceHolder;
	}

	public String getCurrent() {
		return current;
	}

	public void setCurrent(String current) {
		this.current = current;
	}

	public String getOther() {
		return other;
	}

	public void setOther(String other) {
		this.other = other;
	}

	public String getUrl() {
		return url;
	}

	//设置url
	public void setUrl(String url){
		this.url = url;
	}
	
	/**
	 * 替换url中的页数
	 * @param int page 指定的页数
	 * @return String 如果失败,返回原始url
	 * @autor doowan
	 */
	public String generateUrl(int page){
		String reg = "([(?)|&]*"+this.getName()+"=)(\\d+)";
		Matcher matcher = Pattern.compile(reg).matcher(this.getUrl());
		if(!matcher.find()){
			reg = "\\?(.*)$";
			matcher = Pattern.compile(reg).matcher(this.getUrl());
			if(this.getUrl().indexOf('?') > -1 && matcher.find()){
				return this.getUrl() + "&" + this.name + "=" + page;
			}
			return this.getUrl() + "?" + this.name + "=" + page;
		}
		return matcher.replaceAll(matcher.group(1)+String.valueOf(page));
	}
	
	/**
	 * 返回分页按钮字符串
	 * @param int page 该页的页码
	 * @param String name 该页的文字描述
	 * @return String
	 * @author doowan
	 */
	protected String generateOther(int page, String name){
		String other = "";
		//替换指定页页数
		other = this.getOther().replace(new StringBuffer(this.getPageSpaceHolder()), 
										new StringBuffer(String.valueOf(name)));
		//替换指定页的url
		other = other.replace(new StringBuffer(this.getUrlSpaceHolder()),
							new StringBuffer(this.generateUrl(page)));
		return other;
	}
	
	//返回当前页的内容
	protected String generateCurrent(){
		return this.getCurrent().replace(new StringBuffer(this.getPageSpaceHolder()), 
											new StringBuffer(String.valueOf(this.currentPage)));
	}
	
	//根据当前的页码返回页码的起始值
	private int getBeginPoint(){
		if(this.interval >= this.totalPage){
			return 1;
		}
		//currentPage的页数为最后this.interval个页数的一页,所以直接返回totalPage-interval
		if(this.totalPage - this.currentPage + 1 <= this.interval){
			return this.totalPage - this.interval + 1;
		}
		int start = (int)Math.floor(this.interval/2);
		int page = this.currentPage - start;
		if(page < 1){
			return 1;
		}
		return page;
	}
	//根据当前的页码返回页码的截止值  start:起始位置
	private int getEndPoint(int start){
		int end = start + this.interval - 1; //第start页已存在,所以减1取后几页
		if(end > this.totalPage){
			end = this.totalPage;
		}
		return end;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值