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

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

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

package entity;

public class Pages {
public ArrayList<Items> 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%pagesize==0)?(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<Items> getInitPage(ArrayList<Items> list,int Page,int pagesize){//初始化分页信息
ArrayList<Items> newList=new ArrayList<Items>();
this.list=list;
this.pagesize=pagesize;
recordCount=list.size();//查询到的集合的元素个数
this.maxPage=getMaxPage();//获取最大页数
for(int i=(Page-1)*pagesize;i<Page*pagesize;i++){
//若是已经遍历完集合了,则终止循环
if(i>=recordCount){
break;
}else{
newList.add(list.get(i));
}
}
return newList;
}

public ArrayList<Items> getAppointPage(int Page){//获取指定页的数据
ArrayList<Items> newList=new ArrayList<Items>();
for(int i=(Page-1)*pagesize;i<Page*pagesize-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><div style=\"width:700px; margin:0 auto;\">";
if(Page>1){
strHtml=strHtml+"<a class=\"change_page\" href='"+url+"?Page=1"+"'>第一页</a> ";
strHtml=strHtml+"<a class=\"change_page\" href='"+url+"?Page="+(Page-1)+"'>上一页</a> ";
}
strHtml=strHtml+ "<a class=\"change_nopage\">当前页数:"+Page+"/"+maxPage+" &nbsp;</a>";
if(Page<maxPage){
strHtml=strHtml+"<a class=\"change_page\" href='"+url+"?Page="+(Page+1)+"'>下一页</a>"
+ " <a class=\"change_page\" href='"+url+"?Page="+maxPage+"'>最后一页&nbsp;</a>";
}
strHtml=strHtml+"</div></div>";
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<Items> 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中的输出记录导航的字符串方法,显示导航条。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值