分页。。。

1 package test.dao; 2 3 import java.util.List; 4 5 /** 6 * 用于分页的工具类 7 * @author 莫取网名 8 */ 9 public class Pager<T> { 10 11 private List<T> list; //对象记录结果集 12 private int total = 0; // 总记录数 13 private int limit = 20; // 每页显示记录数 14 private int pages = 1; // 总页数 15 private int pageNumber = 1; // 当前页 16 17 private boolean isFirstPage=false; //是否为第一页 18 private boolean isLastPage=false; //是否为最后一页 19 private boolean hasPreviousPage=false; //是否有前一页 20 private boolean hasNextPage=false; //是否有下一页 21 22 private int navigatePages=8; //导航页码数 23 private int[] navigatePageNumbers; //所有导航页号 24 25 public Pager(int total, int pageNumber) { 26 init(total, pageNumber, limit); 27 } 28 29 public Pager(int total, int pageNumber, int limit) { 30 init(total, pageNumber, limit); 31 } 32 33 private void init(int total, int pageNumber, int limit){ 34 //设置基本参数 35 this.total=total; 36 this.limit=limit; 37 this.pages=(this.total-1)/this.limit+1; 38 39 //根据输入可能错误的当前号码进行自动纠正 40 if(pageNumber<1){ 41 this.pageNumber=1; 42 }else if(pageNumber>this.pages){ 43 this.pageNumber=this.pages; 44 }else{ 45 this.pageNumber=pageNumber; 46 } 47 48 //基本参数设定之后进行导航页面的计算 49 calcNavigatePageNumbers(); 50 51 //以及页面边界的判定 52 judgePageBoudary(); 53 } 54 55 /** 56 * 计算导航页 57 */ 58 private void calcNavigatePageNumbers(){ 59 //当总页数小于或等于导航页码数时 60 if(pages<=navigatePages){ 61 navigatePageNumbers=new int[pages]; 62 for(int i=0;i<pages;i++){ 63 navigatePageNumbers[i]=i+1; 64 } 65 }else{ //当总页数大于导航页码数时 66 navigatePageNumbers=new int[navigatePages]; 67 int startNum=pageNumber-navigatePages/2; 68 int endNum=pageNumber+navigatePages/2; 69 70 if(startNum<1){ 71 startNum=1; 72 //(最前navigatePages页 73 for(int i=0;i<navigatePages;i++){ 74 navigatePageNumbers[i]=startNum++; 75 } 76 }else if(endNum>pages){ 77 endNum=pages; 78 //最后navigatePages页 79 for(int i=navigatePages-1;i>=0;i--){ 80 navigatePageNumbers[i]=endNum--; 81 } 82 }else{ 83 //所有中间页 84 for(int i=0;i<navigatePages;i++){ 85 navigatePageNumbers[i]=startNum++; 86 } 87 } 88 } 89 } 90 91 /** 92 * 判定页面边界 93 */ 94 private void judgePageBoudary(){ 95 isFirstPage = pageNumber == 1; 96 isLastPage = pageNumber == pages && pageNumber!=1; 97 hasPreviousPage = pageNumber > 1; 98 hasNextPage = pageNumber < pages; 99 } 100 101 102 public void setList(List<T> list) { 103 this.list = list; 104 } 105 106 /** 107 * 得到当前页的内容 108 * @return {List} 109 */ 110 public List<T> getList() { 111 return list; 112 } 113 114 /** 115 * 得到记录总数 116 * @return {int} 117 */ 118 public int getTotal() { 119 return total; 120 } 121 122 /** 123 * 得到每页显示多少条记录 124 * @return {int} 125 */ 126 public int getLimit() { 127 return limit; 128 } 129 130 /** 131 * 得到页面总数 132 * @return {int} 133 */ 134 public int getPages() { 135 return pages; 136 } 137 138 /** 139 * 得到当前页号 140 * @return {int} 141 */ 142 public int getPageNumber() { 143 return pageNumber; 144 } 145 146 147 /** 148 * 得到所有导航页号 149 * @return {int[]} 150 */ 151 public int[] getNavigatePageNumbers() { 152 return navigatePageNumbers; 153 } 154 155 public boolean isFirstPage() { 156 return isFirstPage; 157 } 158 159 public boolean isLastPage() { 160 return isLastPage; 161 } 162 163 public boolean hasPreviousPage() { 164 return hasPreviousPage; 165 } 166 167 public boolean hasNextPage() { 168 return hasNextPage; 169 } 170 171 public String toString(){ 172 StringBuffer sb=new StringBuffer(); 173 sb.append("[") 174 .append("total=").append(total) 175 .append(",pages=").append(pages) 176 .append(",pageNumber=").append(pageNumber) 177 .append(",limit=").append(limit) 178 .append(",isFirstPage=").append(isFirstPage) 179 .append(",isLastPage=").append(isLastPage) 180 .append(",hasPreviousPage=").append(hasPreviousPage) 181 .append(",hasNextPage=").append(hasNextPage) 182 .append(",navigatePageNumbers="); 183 int len=navigatePageNumbers.length; 184 if(len>0)sb.append(navigatePageNumbers[0]); 185 for(int i=1;i<len;i++){ 186 sb.append(" "+navigatePageNumbers[i]); 187 } 188 sb.append(",list.size="+list.size()); 189 sb.append("]"); 190 return sb.toString(); 191 } 192 }
posted @ 2012-11-11 23:35  Onakaumi  阅读(160)  评论(0)    收藏  举报