java后台如何实现页面分页功能

在做购物平台或者考试系统等数据量很多的开发项目时,分页是个必不可少的功能。分页也有很多种实现方法,如何才能做到又简单,又不占用太多资源的分页功能呢?最近,本人在编写购物平台时用到的分页实现自认为还不错,适合初学者借鉴。好,闲话不多说,上代码:

先创建一个javaBean,里面定义分页中用到的变量和方法:

package entity;

public class Pages {
public ArrayList list=null;
private int recordCount=0;//保存商品总数的变量
private int pagesize=1;//保存每页显示的记录数的变量
private int maxPage=0;//保存最大页数的变量
private int Page=1;//当前页数

/省略get,set方法/
public int getMaxPage(){//获取最大页数
int maxPage=(recordCount%pagesize0)?(recordCount%pagesize):(recordCount/pagesize+1);
return maxPage;
}
public int getPage(String str){//将输入的页数赋值给Page
if(str
null){
str=“0”;
}
int Page=Integer.parseInt(str);
if(Page<1)
Page=1;
else if(((Page-1)*pagesize+1)>recordCount){//当输入的页数大于最大页数时,使它变成最大页数
Page=maxPage;
}
return Page;
}
public ArrayList getInitPage(ArrayList list,int Page,int pagesize){//初始化分页信息
ArrayList newList=new ArrayList();
this.list=list;
this.pagesize=pagesize;
recordCount=list.size();//查询到的集合的元素个数
this.maxPage=getMaxPage();//获取最大页数
for(int i=(Page-1)pagesize;i<Pagepagesize;i++){
//若是已经遍历完集合了,则终止循环
if(i>=recordCount){
break;
}else{
newList.add(list.get(i));
}
}
return newList;
}

public ArrayList getAppointPage(int Page){//获取指定页的数据
ArrayList newList=new ArrayList();
for(int i=(Page-1)pagesize;i<Pagepagesize-1;i++){
//若是已经遍历完集合了,则终止循环
if(i>=recordCount){
break;
}else{
newList.add(list.get(i));
}
}
return newList;
}

public String printCtrl(int Page,String url,int maxPage){//输出记录导航的字符串
String strHtml="

<div style=“width:700px; margin:0 auto;”>";
if(Page>1){
strHtml=strHtml+"<a class=“change_page” href=’"+url+"?Page=1"+"’>第一页 “;
strHtml=strHtml+”<a class=“change_page” href=’"+url+"?Page="+(Page-1)+"’>上一页 “;
}
strHtml=strHtml+ “<a class=“change_nopage”>当前页数:”+Page+”/"+maxPage+"  “;
if(Page<maxPage){
strHtml=strHtml+”<a class=“change_page” href=’"+url+"?Page="+(Page+1)+"’>下一页"

  • " <a class=“change_page” href=’"+url+"?Page="+maxPage+"’>最后一页 “;
    }
    strHtml=strHtml+”";
    return strHtml;
    }
    }

然后在servlet中调用javaBean进行分页就ok了!

servlet类中:

String strPage=request.getParameter(“Page”);
int Page=1;
if(request.getSession().getAttribute(“myPages”)==null){
myPages=new Pages();
ServletContext sc=request.getServletContext();
DBhelper db=(DBhelper)sc.getAttribute(“dbhelper”);
ItemsDAO itemsDao=new ItemsDAO(db);
    ArrayList list=itemsDao.getAllItems();
    int recordCount=list.size();
    int pagesize=12;
    int maxPage=myPages.getMaxPage();
    myPages.setPagesize(pagesize);
    myPages.setList(list);
    myPages.setMaxPage(maxPage);
    myPages.setRecordCount(recordCount);
newList=myPages.getInitPage(list, 1, pagesize);//初始化分页信息,即获取到存在数据库中的list,同时获取到首页数据
}else{
myPages=(Pages) request.getSession().getAttribute(“myPages”);
Page=myPages.getPage(strPage);
newList=myPages.getAppointPage(Page);//获取当前页数据
}
myPages.setPage(Page);
request.getSession().setAttribute(“myPages”, myPages);
request.getSession().setAttribute(“ItemsList”, newList);
response.sendRedirect(“firstPage.jsp”);

大致思路是将从数据库中取出的集合进行初始化分页;分完页下次就能直接调用获取指定页的数据的方法了,不需要重复调用数据库。

还有一点,需要在jsp页面中调用javaBean中的输出记录导航的字符串方法,显示导航条。

作者:aGreySky
来源:CSDN
原文:https://blog.csdn.net/aGreySky/article/details/73799993
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值