用Java寫一個(gè)分頁的工具類

以前做分頁的時(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掩浙,一起剝皮案震驚了整個(gè)濱河市花吟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厨姚,老刑警劉巖衅澈,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谬墙,居然都是意外死亡今布,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門拭抬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來部默,“玉大人,你說我怎么就攤上這事造虎「吊澹” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵算凿,是天一觀的道長份蝴。 經(jīng)常有香客問我,道長氓轰,這世上最難降的妖魔是什么婚夫? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮署鸡,結(jié)果婚禮上案糙,老公的妹妹穿的比我還像新娘镐躲。我一直安慰自己,他們只是感情好侍筛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撒穷,像睡著了一般匣椰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上端礼,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天禽笑,我揣著相機(jī)與錄音,去河邊找鬼蛤奥。 笑死佳镜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的凡桥。 我是一名探鬼主播蟀伸,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缅刽!你這毒婦竟也來了啊掏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤衰猛,失蹤者是張志新(化名)和其女友劉穎迟蜜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啡省,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娜睛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卦睹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畦戒。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖分预,靈堂內(nèi)的尸體忽然破棺而出兢交,到底是詐尸還是另有隱情,我是刑警寧澤笼痹,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布配喳,位于F島的核電站,受9級(jí)特大地震影響凳干,放射性物質(zhì)發(fā)生泄漏晴裹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一救赐、第九天 我趴在偏房一處隱蔽的房頂上張望涧团。 院中可真熱鬧只磷,春花似錦、人聲如沸泌绣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阿迈。三九已至元媚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間苗沧,已是汗流浹背刊棕。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留待逞,地道東北人甥角。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像识樱,于是被迫代替她去往敵國和親嗤无。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容