以前做分頁的時(shí)候是每個(gè)需要分頁的action下面寫一大串分頁的代碼嘉涌,今天就想可不可以將分頁的代碼單獨(dú)寫一個(gè)工具類寒匙,這樣就可以隨用隨取了购公,所以就做出來了,把代碼分享給大家,復(fù)制到你們的項(xiàng)目下面就可以直接用了
問題一:為什么要用工具類焰轻?
答:在我們的開發(fā)過程中有很多重復(fù)冗余的代碼,將他們寫在一個(gè)類里昆雀,當(dāng)需要的時(shí)候調(diào)用就好辱志,這樣就提高了效率蝠筑,減少了代碼的冗余,減少了代碼的耦合性
問題二:分頁的工具類有什么好處揩懒?
答:好處當(dāng)然很多什乙,話不多說,你們自己看
1已球、寫工具類前
????????????????????????String?pageNum_1=null;
????????????//獲取傳遞的參數(shù),因?yàn)閡rlrewrite所以都傳給tagname了
????????????if(tags.getTagname().indexOf("/")>0){
????????????String[]?params=tags.getTagname().split("/");
????????????tags.setTagname(params[0]);
????????????pageNum_1=params[1];
????????????}
????????????/*查找熱門文章*/
????????????//設(shè)置初始序號(hào)
????????????int?orderNum=0;
????????????article.setOrderNum(orderNum);
????????????//查找前十的文章
????????????List?hotArticle=articleService.findHotArticle(article);
????????????/*分頁*/
????????????//初始頁碼
????????????intpageNum=1;
????????????//計(jì)算,當(dāng)傳回來的有值時(shí)
????????????if(pageNum_1!=null){
????????????????pageNum=Integer.parseInt(pageNum_1);
????????????}
????????????//每頁條數(shù)
????????????intcurrentPage=10;
????????????//計(jì)算后的開始條數(shù)
????????????intstartPage=(pageNum-1)*currentPage;
????????????//計(jì)算該標(biāo)簽下的總條數(shù)
????????????inttotalCount=articleService.findTagsArtCount(tags);
????????????//計(jì)算總頁數(shù)
????????????inttotalPage;
????????????if(totalCount%currentPage>0){
????????????totalPage=(totalCount/currentPage)+1;
????????????}else{
????????????????totalPage=totalCount/currentPage;
????????????}
????????????//開始頁數(shù)
????????????if(pageNum>=5){
????????????????//如果大于5則是當(dāng)前頁數(shù)頁數(shù)減3
????????????????tags.setBegin(pageNum-2);
????????????}else{
????????????????//如果小于5則從一開始
????????????????tags.setBegin(1);
????????????}
????????????//結(jié)束頁數(shù)
????????????if(pageNum>5){
????????????????if(totalPage>=pageNum){
????????????????//用switch算結(jié)束
????????????????switch(totalPage-pageNum){
????????????????case0:tags.setEnd(pageNum);break;
????????????????case1:tags.setEnd(pageNum+1);break;
????????????????case2:tags.setEnd(pageNum+2);break;
????????????????case3:tags.setEnd(pageNum+3);break;
????????????????default:tags.setEnd(pageNum+3);
????????????????}
????????????????}else{
????????????????????tags.setEnd(totalPage);
????????????????}
????????????}else{
????????????????if(totalPage>5){
?????????????????????//用switch算結(jié)束
????????????????????switch(totalPage-5){
????????????????????default:tags.setEnd(6);
????????????????????}
????????????????}else{
????????????????????tags.setEnd(totalPage);
????????????????}
????????????}
????????????tags.setStartPage(startPage);
????????????tags.setTotalCount(totalCount);
????????????tags.setTotalPage(totalPage);
????????????tags.setPageNum(pageNum);
????????????tags.setCurrentPage(currentPage);
2臣镣、寫工具類后
/*分頁*/
????????//初始頁碼
????????//頁面請求頁碼數(shù)
????????String?pageNum_1=request.getParameter("pageNum");
????????//獲取數(shù)據(jù)庫總條數(shù)
????????inttotalCount=articleService.findCount(article);
????????//設(shè)置每頁條數(shù)
????????intcurrentPage=10;
????????Page?page=newPage();
????????pb=page.pagetool(pageNum_1,?currentPage,?totalCount);
效果很明顯吧,好了智亮,下面把教程貼出來
開發(fā)過程
一忆某、建立一個(gè)分頁bean,這里有所有分頁需要用到的屬性
/**
?*?
*?
Title:PageBean?
*?
Description:?分頁需要的bean
*?@author??任漢東
*?@date????2017年5月24日下午5:38:44
?*/
publicclassPageBean?extendsUser{
????privateintpageNum;?//?頁碼
????privateintcurrentPage;?//?每頁條數(shù)
????privateinttotalPage;?//?總頁數(shù)
????privateinttotalCount;?//?總條數(shù)
????privateintstartPage;//limit開始條數(shù)
????privateintbegin;//foreach中的begin
????privateintend;//foreach里的end值
????publicintgetPageNum()?{
????????returnpageNum;
????}
????publicvoidsetPageNum(intpageNum)?{
????????this.pageNum?=?pageNum;
????}
????publicintgetCurrentPage()?{
????????returncurrentPage;
????}
????publicvoidsetCurrentPage(intcurrentPage)?{
????????this.currentPage?=?currentPage;
????}
????publicintgetTotalPage()?{
????????returntotalPage;
????}
????publicvoidsetTotalPage(inttotalPage)?{
????????this.totalPage?=?totalPage;
????}
????publicintgetTotalCount()?{
????????returntotalCount;
????}
????publicvoidsetTotalCount(inttotalCount)?{
????????this.totalCount?=?totalCount;
????}
????publicintgetStartPage()?{
????????returnstartPage;
????}
????publicvoidsetStartPage(intstartPage)?{
????????this.startPage?=?startPage;
????}
????publicintgetBegin()?{
????????returnbegin;
????}
????publicvoidsetBegin(intbegin)?{
????????this.begin?=?begin;
????}
????publicintgetEnd()?{
????????returnend;
????}
????publicvoidsetEnd(intend)?{
????????this.end?=?end;
????}
二阔蛉、建立一個(gè)分頁的工具類弃舒,這里叫Page,然后在里面寫一個(gè)pagetool方法供我們調(diào)用状原,這里我都寫注釋了聋呢,代碼可以直接復(fù)制使用
/**
?*?
*?
Title:Page?
*?
Description:?分頁的工具類
*?@author??任漢東
*?@date????2018年7月31日上午1:31:17
?*/
publicclassPage?{
????//分頁的方法
????publicPageBean?pagetool(String?pageNum_1,intcurrentPage,inttotalCount){
????????//傳入三個(gè)必要值:1、頁面請求的頁碼颠区,2削锰、每頁需要幾條數(shù)據(jù),3瓦呼、數(shù)據(jù)庫總條數(shù)
????????//實(shí)例化分頁bean
????????PageBean?pagebean=newPageBean();
????????????????//初始頁碼
????????????????intpageNum=1;
????????????????//計(jì)算,當(dāng)傳回來的有值時(shí)??????
????????????????if(pageNum_1!=null){
????????????????????pageNum=Integer.parseInt(pageNum_1);
????????????????}
????????????????//每頁條數(shù)
????????????????//計(jì)算后的開始條數(shù)
????????????????intstartPage=(pageNum-1)*currentPage;????????????
????????????????//總條數(shù)
????????????????//計(jì)算總頁數(shù)
????????????????inttotalPage;
????????????????if(totalCount%currentPage>0){
????????????????totalPage=(totalCount/currentPage)+1;
????????????????}else{
????????????????????totalPage=totalCount/currentPage;
????????????????}
????????????????//開始頁數(shù)具體算法
????????????????if(pageNum>=5){
????????????????????//如果大于5則是當(dāng)前頁數(shù)頁數(shù)減3
????????????????????pagebean.setBegin(pageNum-2);
????????????????}else{
????????????????????//如果小于5則從一開始
????????????????????pagebean.setBegin(1);
????????????????}
????????????????//結(jié)束頁數(shù)具體算法喂窟,這里是顯示前6頁,根據(jù)自己項(xiàng)目需求更改
????????????????if(pageNum>5){
????????????????????if(totalPage>=pageNum){
????????????????????//用switch算結(jié)束
????????????????????switch(totalPage-pageNum){
????????????????????case0:pagebean.setEnd(pageNum);break;
????????????????????case1:pagebean.setEnd(pageNum+1);break;
????????????????????case2:pagebean.setEnd(pageNum+2);break;
????????????????????case3:pagebean.setEnd(pageNum+3);break;
????????????????????default:pagebean.setEnd(pageNum+3);
????????????????????}
????????????????????}else{
????????????????????????pagebean.setEnd(totalPage);
????????????????????}
????????????????}else{
????????????????????if(totalPage>5){
?????????????????????????//用switch算結(jié)束
????????????????????????switch(totalPage-5){
????????????????????????default:pagebean.setEnd(6);
????????????????????????}
????????????????????}else{
????????????????????????pagebean.setEnd(totalPage);
????????????????????}
????????????????}
????????????????//將前端頁面需要數(shù)據(jù)set進(jìn)pagebean
????????????????pagebean.setStartPage(startPage);
????????????????pagebean.setTotalCount(totalCount);
????????????????pagebean.setTotalPage(totalPage);
????????????????pagebean.setPageNum(pageNum);
????????????????pagebean.setCurrentPage(currentPage);
????????returnpagebean;
????}
三央串、測試磨澡,這里寫了一個(gè)main方法進(jìn)行測試
publicstaticvoidmain(String[]?args)?{
????????Page?page=newPage();
????????PageBean?pagebean=newPageBean();
????????//這里前端請求的頁碼必須為string,不然無法確認(rèn)是否為空
????????String?pagenum_1="3";
????????pagebean=page.pagetool(pagenum_1,?10,?128);
????????System.out.println("開始條數(shù):"+pagebean.getStartPage());
????????System.out.println("每頁條數(shù):"+pagebean.getCurrentPage());
????????System.out.println("總條數(shù):"+pagebean.getTotalCount());
????????System.out.println("請求的頁碼:"+pagebean.getPageNum());
????????System.out.println("總頁數(shù):"+pagebean.getTotalPage());
????????System.out.println("foreach中begin值:"+pagebean.getBegin());
????????System.out.println("foreach中end值:"+pagebean.getEnd());
????}
這里我們傳入請求頁碼為第三頁,每頁10條數(shù)據(jù)质和,數(shù)據(jù)庫總數(shù)據(jù)為128條稳摄,得到如下結(jié)果
開始條數(shù):20
每頁條數(shù):10
總條數(shù):128
請求的頁碼:3
總頁數(shù):13
foreach中begin值:1
foreach中end值:6
四、調(diào)用分頁工具類饲宿,在需要的action進(jìn)行調(diào)用即可
/*分頁*/
????????//初始頁碼
????????//頁面請求的頁碼數(shù)
????????String?pageNum_1=request.getParameter("pageNum");
????????//獲取數(shù)據(jù)庫總條數(shù),自行用jdbc獲取
????????inttotalCount=articleService.findCount(article);
????????//設(shè)置每頁條數(shù)
????????intcurrentPage=10;
????????//實(shí)例化工具類
????????Page?page=newPage();
????????//調(diào)用方法將得到的數(shù)據(jù)存到pagebean中
????????pb=page.pagetool(pageNum_1,?currentPage,?totalCount);
????????//厦酬。。瘫想。仗阅。。国夜。
????????//减噪。。。筹裕。
????????//接下來就可以用獲得的數(shù)據(jù)為所欲為了醋闭。。朝卒。
五证逻、前端調(diào)用返回?cái)?shù)據(jù),在這里核心是用foreach調(diào)用抗斤,都寫了注釋所以比較亂囚企,具體是用就是用在后臺(tái)獲取的begin和end值來控制分頁頁碼的顯示,然后用if判斷遍歷的數(shù)值和在后臺(tái)獲取的當(dāng)前頁碼是否相等豪治,相等就高亮顯示洞拨,否則不高亮顯示
OK,這樣就可以了负拟,代碼可以直接拿去用烦衣,按照我說的方法,絕對可以成功
本文轉(zhuǎn)自Fun言網(wǎng):www.funyan.cn