以前做分页的时候是每个需要分页的action下面写一大串分页的代码,今天就想可不可以将分页的代码单独写一个工具类,这样就可以随用随取了,所以就做出来了,把代码分享给大家,复制到你们的项目下面就可以直接用了
问题一:为什么要用工具类?
答:在我们的开发过程中有很多重复冗余的代码,将他们写在一个类里,当需要的时候调用就好,这样就提高了效率,减少了代码的冗余,减少了代码的耦合性
问题二:分页的工具类有什么好处?
答:好处当然很多,话不多说,你们自己看
1、写工具类前
String pageNum_1=null;
//获取传递的参数,因为urlrewrite所以都传给tagname了
if(tags.getTagname().indexOf("/")>0){
String[] params=tags.getTagname().split("/");
tags.setTagname(params[0]);
pageNum_1=params[1];
}
/*查找热门文章*/
//设置初始序号
int orderNum=0;
article.setOrderNum(orderNum);
//查找前十的文章
List hotArticle=articleService.findHotArticle(article);
/*分页*/
//初始页码
intpageNum=1;
//计算,当传回来的有值时
if(pageNum_1!=null){
pageNum=Integer.parseInt(pageNum_1);
}
//每页条数
intcurrentPage=10;
//计算后的开始条数
intstartPage=(pageNum-1)*currentPage;
//计算该标签下的总条数
inttotalCount=articleService.findTagsArtCount(tags);
//计算总页数
inttotalPage;
if(totalCount%currentPage>0){
totalPage=(totalCount/currentPage)+1;
}else{
totalPage=totalCount/currentPage;
}
//开始页数
if(pageNum>=5){
//如果大于5则是当前页数页数减3
tags.setBegin(pageNum-2);
}else{
//如果小于5则从一开始
tags.setBegin(1);
}
//结束页数
if(pageNum>5){
if(totalPage>=pageNum){
//用switch算结束
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算结束
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、写工具类后
/*分页*/
//初始页码
//页面请求页码数
String pageNum_1=request.getParameter("pageNum");
//获取数据库总条数
inttotalCount=articleService.findCount(article);
//设置每页条数
intcurrentPage=10;
Page page=newPage();
pb=page.pagetool(pageNum_1, currentPage, totalCount);
效果很明显吧,好了,下面把教程贴出来
开发过程
一、建立一个分页bean,这里有所有分页需要用到的属性
/**
*
*
Title:PageBean
*
Description: 分页需要的bean
* @author 任汉东
* @date 2017年5月24日下午5:38:44
*/
publicclassPageBean extendsUser{
privateintpageNum; // 页码
privateintcurrentPage; // 每页条数
privateinttotalPage; // 总页数
privateinttotalCount; // 总条数
privateintstartPage;//limit开始条数
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;
}
二、建立一个分页的工具类,这里叫Page,然后在里面写一个pagetool方法供我们调用,这里我都写注释了,代码可以直接复制使用
/**
*
*
Title:Page
*
Description: 分页的工具类
* @author 任汉东
* @date 2018年7月31日上午1:31:17
*/
publicclassPage {
//分页的方法
publicPageBean pagetool(String pageNum_1,intcurrentPage,inttotalCount){
//传入三个必要值:1、页面请求的页码,2、每页需要几条数据,3、数据库总条数
//实例化分页bean
PageBean pagebean=newPageBean();
//初始页码
intpageNum=1;
//计算,当传回来的有值时
if(pageNum_1!=null){
pageNum=Integer.parseInt(pageNum_1);
}
//每页条数
//计算后的开始条数
intstartPage=(pageNum-1)*currentPage;
//总条数
//计算总页数
inttotalPage;
if(totalCount%currentPage>0){
totalPage=(totalCount/currentPage)+1;
}else{
totalPage=totalCount/currentPage;
}
//开始页数具体算法
if(pageNum>=5){
//如果大于5则是当前页数页数减3
pagebean.setBegin(pageNum-2);
}else{
//如果小于5则从一开始
pagebean.setBegin(1);
}
//结束页数具体算法,这里是显示前6页,根据自己项目需求更改
if(pageNum>5){
if(totalPage>=pageNum){
//用switch算结束
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算结束
switch(totalPage-5){
default:pagebean.setEnd(6);
}
}else{
pagebean.setEnd(totalPage);
}
}
//将前端页面需要数据set进pagebean
pagebean.setStartPage(startPage);
pagebean.setTotalCount(totalCount);
pagebean.setTotalPage(totalPage);
pagebean.setPageNum(pageNum);
pagebean.setCurrentPage(currentPage);
returnpagebean;
}
三、测试,这里写了一个main方法进行测试
publicstaticvoidmain(String[] args) {
Page page=newPage();
PageBean pagebean=newPageBean();
//这里前端请求的页码必须为string,不然无法确认是否为空
String pagenum_1="3";
pagebean=page.pagetool(pagenum_1, 10, 128);
System.out.println("开始条数:"+pagebean.getStartPage());
System.out.println("每页条数:"+pagebean.getCurrentPage());
System.out.println("总条数:"+pagebean.getTotalCount());
System.out.println("请求的页码:"+pagebean.getPageNum());
System.out.println("总页数:"+pagebean.getTotalPage());
System.out.println("foreach中begin值:"+pagebean.getBegin());
System.out.println("foreach中end值:"+pagebean.getEnd());
}
这里我们传入请求页码为第三页,每页10条数据,数据库总数据为128条,得到如下结果
开始条数:20
每页条数:10
总条数:128
请求的页码:3
总页数:13
foreach中begin值:1
foreach中end值:6
四、调用分页工具类,在需要的action进行调用即可
/*分页*/
//初始页码
//页面请求的页码数
String pageNum_1=request.getParameter("pageNum");
//获取数据库总条数,自行用jdbc获取
inttotalCount=articleService.findCount(article);
//设置每页条数
intcurrentPage=10;
//实例化工具类
Page page=newPage();
//调用方法将得到的数据存到pagebean中
pb=page.pagetool(pageNum_1, currentPage, totalCount);
//。。。。。。
//。。。。
//接下来就可以用获得的数据为所欲为了。。。
五、前端调用返回数据,在这里核心是用foreach调用,都写了注释所以比较乱,具体是用就是用在后台获取的begin和end值来控制分页页码的显示,然后用if判断遍历的数值和在后台获取的当前页码是否相等,相等就高亮显示,否则不高亮显示
OK,这样就可以了,代码可以直接拿去用,按照我说的方法,绝对可以成功
本文转自Fun言网:www.funyan.cn