1 /**
2 * Java 分页工具类3 */
4 packagecom.common.tool.util;5
6 importjava.util.HashMap;7 importjava.util.List;8 importjava.util.Map;9
10 /**
11 *@authorneuhxy12 *@version2015-4-23 15:25:2113 *14 */
15 public classPageUtil {16
17 private int page = 1; //当前页
18 public int total = 0; //总页数
19 private int size = 10; //每页5条数据
20 private int slice = 5; //切片,当页大于切片时,进行分页处理
21 private int totalRows = 0; //总数据数
22 private int pageStartRow = 0;//每页的起始数
23 private int pageEndRow = 0; //每页显示数据的终止数
24 private boolean hasNextPage = false; //是否有下一页
25 private boolean hasPreviousPage = false; //是否有前一页
26 private List> list; //分页组件包含的集合
27 private List> show; //分页中需要显示的List
28 private String action; //设置跳转URL
29 private String method = "GET"; //使用POST或者GET请求
30 @SuppressWarnings("unused")31 private String code1; //分页组件的现实代码
32 @SuppressWarnings("unused")33 private String code2; //分页组件的现实代码
34 private Map map = new HashMap(); //隐含条件
35 public int[] sizeArray = { 10, 20, 50, 100, 1000, 5000 }; //设置几种可以显示的条数36
37 //默认构造函数
38 publicPageUtil() {39 }40
41 /**
42 * 分页初始化43 *44 *@paramlist45 *@paramsize46 */
47 public void init(List> initList, intpageSize) {48 if (null !=initList) {49
50 this.setSize(pageSize);51 this.setList(initList);52
53 totalRows =initList.size();54
55 hasPreviousPage = false;56
57 if ((totalRows % this.getSize()) == 0) {58 total = totalRows / this.getSize();59 } else{60 total = totalRows / this.getSize() + 1;61 }62
63 if (page >= total) { hasNextPage = false; } else { hasNextPage = true; }64
65 if (totalRows < this.getSize()) {66 this.pageStartRow = 0;67 this.pageEndRow =totalRows;68 } else{69 this.pageStartRow = 0;70 this.pageEndRow = this.getSize();71 }72 this.setShow(getShow(this.getPage()));73 }74
75 }76
77 //第一种样式
- /
- 格式
78 publicString getCode1() {79
80 StringBuffer sb = newStringBuffer();81 sb.append("
");82 sb.append("- ");83
84 //判断是否有上一页
85 if(isHasPreviousPage()) {86 sb.append("
- «");87 sb.append("
- <");88 } else{89 sb.append("
- «");90 sb.append("
- <");91 }92
93 //中间显示94 //当总页数大于切片时,才显示 ... 分页效果
95 if (getTotal() >getSlice()) {96
97 //如果当前页码在 1 - getSlice(),显示右侧 ... 翻页按钮
98 if (getPage() > 0 && getPage() <=getSlice()99 && getPage() < getTotal() -getSlice()) {100 for (int i = 1; i <= getSlice(); i++) {101 String spanClzz = "
" + i + " (current)";102103 if (this.page ==i) {104 spanClzz = "
" + i + " (current)";105 }106 sb.append(spanClzz);107 //当总页数大于3 的时候 添加右侧 ... 分页108 }109 if (getTotal() > getSlice() +1) {110 String dotClzz = "
... (current)";111 sb.append(dotClzz);112 }113114 }115 //如果当前页码在6 到 total - 6 页,显示两端的两个 ...翻页按钮
116 if (getPage() > getSlice() && getPage() <= getTotal() -getSlice()) {117 String dotClzz = "
118 +getAction()119 + "?page="
120 + (getPage() - ((getSlice() + 1) / 2))121 + "\"> ... (current)
";122 sb.append(dotClzz);123 for (int i = getPage() - ((getSlice() - 1) / 2); i <=getPage()124 + ((getSlice() - 1) / 2); i++) {125 String spanClzz = "126 +getAction()127 + "?page="
";132133 if (this.page ==i) {134 spanClzz = "
" ";137 }138 sb.append(spanClzz);139 //当总页数大于getSlice() 的时候 添加右侧 ... 分页140
141 }142 dotClzz = "
143 +getAction()144 + "?page="
145 + (getPage() + ((getSlice() + 1) / 2))146 + "\"> ... (current)
";147 sb.append(dotClzz);148149 }150 //如果当前页码在total-getSlice() 到 total 页,左侧显示一个...翻页按钮
151 if (getPage() > 0 && getPage() > getTotal() -getSlice()152 && getPage() <=getTotal()) {153
154 String dotClzz = "
155 +getAction()156 + "?page="
157 + (getTotal() -getSlice())158 + "\"> ... (current)
";159 sb.append(dotClzz);160 int s = getTotal() - getSlice() + 1 > 0 ?getTotal()161 - getSlice() + 1 : 1;162 for (int i = s; i <= getTotal(); i++) {163 String spanClzz = "164 +getAction()165 + "?page="
";170171 if (this.page ==i) {172 spanClzz = "
" ";175 }176 sb.append(spanClzz);177 }178179 }180 } else{181 //否则直接显示,有几页显示几页,不加...
182 for (int i = 1; i <= getTotal(); i++) {183 String spanClzz = "
" +i185 + " (current)";186187 if (this.page ==i) {188 spanClzz = "
" ";191 }192 sb.append(spanClzz);193 //当总页数大于getSlice() 的时候 添加右侧 ... 分页194
195 }196 }197
198 //判断是否有下一页
199 if(isHasNextPage()) {200 sb.append("
");202 sb.append(" »");204 } else{205 sb.append(" >");206 sb.append(" »");207 }208209 sb.append("
");210 returnsb.toString();211 }212213 //第二种分页样式 带分页现实多少条记录设置
214 publicString getCode2() {215
216 StringBuffer sb = newStringBuffer();217 String code = "
224 setMethod("POST");225 code += "
";227228 String hidden = "";230 if (!map.isEmpty()) {231 for(String key : map.keySet()) {232 System.out.println("key= " + key + " and value= "
233 +map.get(key));234 hidden += "";236 }237 }238 code +=hidden;239 code +=scripts;240
241 //底面样式 首页 上一页
242 if (getPage() != 1) {243 code += "首页 "
244 + "上一页 ";246 } else{247 code += "首页 " + "上一页 ";248 }249
250 //跳第几页
251 code += "第";252 for (int i = 1; i <= getTotal(); i++) {253 if (i == this.getPage()) {254 code += "" +i255 + "";256 } else{257 code += "" + i + "";258 }259 }260 code += "页,共" + this.getTotal() + "页";261
262 //每页显示几个记录
263 code += ",每页显示";264 for (int j = 0; j < sizeArray.length; j++) {265 if (sizeArray[j] ==getSize()) {266 code += "" + sizeArray[j] + "";268 } else{269 code += "" +sizeArray[j]270 + "";271 }272 }273
274 code += "条记录";275
276 //下一页 尾页
277 if (getPage() !=getTotal()) {278 code += "下一页 " + "
";281 } else{282 code += " 下一页 " + " 尾页 ";283 }284 code += "290 //判断要不要分页
291 public booleanisNext() {292 return list.size() >getSlice();293 }294
295 public void setHasPreviousPage(booleanhasPreviousPage) {296 this.hasPreviousPage =hasPreviousPage;297 }298
299 //获取下一个内容
300 public List>getNextPage() {301 page = page + 1;302 disposePage();303 returngetShow(page);304 }305
306 //处理分页
307 private voiddisposePage() {308 if (page == 0) {309 page = 1;310 }311 if ((page - 1) > 0) {312 hasPreviousPage = true;313 } else{314 hasPreviousPage = false;315 }316
317 if (page >=total) {318 hasNextPage = false;319 } else{320 hasNextPage = true;321 }322 }323
324 //获取上一页内容
325 public List>getPreviousPage() {326 page = page - 1;327
328 if ((page - 1) > 0) {329 hasPreviousPage = true;330 } else{331 hasPreviousPage = false;332 }333 if (page >=total) {334 hasNextPage = false;335 } else{336 hasNextPage = true;337 }338 returngetShow(page);339 }340
341 public List>getShow() {342 returnshow;343 }344
345 //获取第 n 页内容
346 public List> getShow(intpage) {347
348 if (page == 0) {349 this.setPage(1);350 page = 1;351 } else{352 this.setPage(page);353 }354
355 this.disposePage();356
357 if (page * size < totalRows) {//判断是否为最后一页
358 pageEndRow = page *size;359 pageStartRow = pageEndRow -size;360 } else{361 pageEndRow =totalRows;362 pageStartRow = size * (total - 1);363 }364
365 List> show = null;366 if (!list.isEmpty()) {367 show =list.subList(pageStartRow, pageEndRow);368 }369 returnshow;370 }371
372 //获取第一页内容
373 public List>getFistPage() {374 if (this.isNext()) {375 return list.subList(0, size);376 } else{377 returnlist;378 }379 }380
381 public intgetPage() {382 returnpage;383 }384
385 public void setPage(intpage) {386 this.page =page;387 }388
389 public intgetTotal() {390 returntotal;391 }392
393 public void setTotal(inttotal) {394 this.total =total;395 }396
397 public intgetSize() {398 returnsize;399 }400
401 public void setSize(intsize) {402 this.size =size;403 }404
405 public intgetTotalRows() {406 returntotalRows;407 }408
409 public void setTotalRows(inttotalRows) {410 this.totalRows =totalRows;411 }412
413 public intgetPageStartRow() {414 returnpageStartRow;415 }416
417 public void setPageStartRow(intpageStartRow) {418 this.pageStartRow =pageStartRow;419 }420
421 public intgetPageEndRow() {422 returnpageEndRow;423 }424
425 public void setPageEndRow(intpageEndRow) {426 this.pageEndRow =pageEndRow;427 }428
429 public booleanisHasNextPage() {430 returnhasNextPage;431 }432
433 public void setHasNextPage(booleanhasNextPage) {434 this.hasNextPage =hasNextPage;435 }436
437 public List>getList() {438 returnlist;439 }440
441 public void setList(List>list) {442 this.list =list;443 }444
445 public booleanisHasPreviousPage() {446 returnhasPreviousPage;447 }448
449 publicString getAction() {450 returnaction;451 }452
453 public voidsetAction(String action) {454 this.action =action;455 }456
457 publicString getMethod() {458 returnmethod;459 }460
461 public voidsetMethod(String method) {462 this.method =method;463 }464
465 public MapgetMap() {466 returnmap;467 }468
469 public void setMap(Mapmap) {470 this.map =map;471 }472
473 public void setShow(List>show) {474 this.show =show;475 }476
477 public voidsetCode1(String code1) {478 this.code1 =code1;479 }480
481 public voidsetCode2(String code2) {482 this.code2 =code2;483 }484
485 public intgetSlice() {486 returnslice;487 }488
489 public void setSlice(intslice) {490 this.slice =slice;491 }492
493 public int[] getSizeArray() {494 returnsizeArray;495 }496
497 public void setSizeArray(int[] sizeArray) {498 this.sizeArray =sizeArray;499 }500
501 }