Java Web的分页工具类

最近写一个java web项目,以前分页的工具类,都是基础架构的人写好了的。也没有去细看,现在遇到这个状况。

就整理一下思路,自己写了一个分页的工具类。写的不好之处,还望斧正。

下面是我的代码:

PageUtil.java

  1 package util;
  2 
  3 import java.util.Map;
  4 
  5 /**
  6  * 分页工具类
  7  * @author lyh
  8  *
  9  */
 10 public class PageUtil {
 11     private int total;    //总数
 12     private int element;  //每夜显示数
 13     private String url;   //访问的url
 14     private Map<String,Object> keys;      //记忆参数
 15     private int p;       //当前页数
 16     private int page;   //总页数
 17 
 18     /**
 19      * 构造传参数
 20      * @param total
 21      * @param element
 22      * @param url
 23      * @param keys
 24      * @param p
 25      */
 26     public PageUtil(int total,int element,String url,Map<String,Object> keys,int p){
 27         this.total = total;
 28         this.element = element;
 29         this.url = url;
 30         this.keys = keys;
 31         this.p = p;
 32         if(this.total != 0 && this.total%this.element == 0){
 33             this.page = this.total/this.element;
 34         }else{
 35             this.page = this.total/this.element+1;
 36         }
 37     }
 38     
 39     /**
 40      * 拼接分页访问的url
 41      * @param p
 42      * @param keys
 43      * @return 拼接好的带参数url
 44      */
 45     private String createFullUrl(int p,Map<String,Object> keys){
 46         StringBuffer buf = new StringBuffer(this.url);
 47         buf.append("?p="+p);
 48         
 49         if(keys != null){
 50             buf.append(this.createParamUrl(keys));
 51         }
 52         return buf.toString();
 53     }
 54     
 55     /**
 56      * 参数的url形式("&dhgks=12&...")
 57      * @param keys
 58      * @return 拼接好的参数url
 59      */
 60     private String createParamUrl(Map<String,Object> keys){
 61         StringBuffer buf = new StringBuffer();
 62         
 63         if(keys != null){
 64             for(String key : keys.keySet()){
 65                 buf.append("&"+key+"="+keys.get(key));
 66             }
 67             return buf.toString();
 68         }else{
 69             return "";
 70         }
 71         
 72     }
 73     
 74     /**
 75      * 生成分页代码
 76      * @return
 77      */
 78     public String showPage(){
 79         StringBuffer buf = new StringBuffer("<div class="footpage">");
 80         
 81         if(this.page<=5){
 82             //5页显示
 83             for(int i=1;i<=this.page;i++){
 84                 if(i==this.p){
 85                     buf.append("<a href=""+this.createFullUrl(i, this.keys)+"" class="hidepage">"+i+"</a>");
 86                 }else{
 87                     buf.append("<a href=""+this.createFullUrl(i, this.keys)+"" class="viewpage">"+i+"</a>");
 88                 }
 89             }
 90         }else{
 91             //超出5页显示
 92             if(this.p==1){
 93                 //如果当前页是第一页的情况
 94                 for(int i=1;i<=5;i++){
 95                     if(i==this.p){
 96                         buf.append("<a href=""+this.createFullUrl(i, this.keys)+"" class="hidepage">"+i+"</a>");
 97                     }else{
 98                         buf.append("<a href=""+this.createFullUrl(i, this.keys)+"" class="viewpage">"+i+"</a>");
 99                     }
100                 }
101                 //超过5页部分省略
102                 buf.append("<span>...</span>");
103             }else{
104                 //当前页不是第一页
105                 //显示首页
106                 buf.append("<a href=""+this.createFullUrl(1, this.keys)+"" class="viewpage">首页</a>");
107                 buf.append("<span>...</span>");
108                 int cou =0;
109                 
110                 //判断五页是否超出范围
111                 if((this.p+5)>this.page){
112                     cou = this.page;
113                 }else{
114                     cou = this.p+5;
115                 }
116                 
117                 for(int j =this.p;j<cou;j++){
118                     if(j==this.p){
119                         buf.append("<a href=""+this.createFullUrl(j, this.keys)+"" class="hidepage">"+j+"</a>");
120                     }else{
121                         buf.append("<a href=""+this.createFullUrl(j, this.keys)+"" class="viewpage">"+j+"</a>");
122                     }
123                 }
124                 
125                 //判断是否还有页需要省略
126                 if(cou != this.page){
127                     buf.append("<span>...</span>");
128                 }
129             }
130             //显示尾页
131             buf.append("<a href=""+this.createFullUrl(this.page, this.keys)+"" class="viewpage">尾页</a>");
132              
133         }
134         
135         buf.append("到<input type="text" id="go"/>页<button onclick="javascript:if(document.getElementById('go').value.match(/^([0-9])*$/)) {window.location='"+this.url+"?p=__PAGE__"+this.createParamUrl(this.keys)+"'.replace('__PAGE__',document.getElementById('go').value);} else {return false;}">确定</button>");
136         buf.append("共"+this.page+"页");
137         buf.append("</div>");
138         return buf.toString();
139     }
140 }

使用方法直接实例化一个PageUtil的对象就可以了,参数从构造方法传入。

原文地址:https://www.cnblogs.com/chengxuyuanxiaoye/p/3895132.html