一个简单的分页类

来源:互联网 发布:公安dna数据库 编辑:程序博客网 时间:2024/04/29 00:48
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; //生成链接地址的urlprivate 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;}//设置urlpublic 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)));//替换指定页的urlother = 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-intervalif(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;}}

0 0
原创粉丝点击