java后台如何实现页面分页功能
2017-06-27 15:20
281 查看
在做购物平台或者考试系统等数据量很多的开发项目时,分页是个必不可少的功能。分页也有很多种实现方法,如何才能做到又简单,又不占用太多资源的分页功能呢?最近,本人在编写购物平台时用到的分页实现自认为还不错,适合初学者借鉴。好,闲话不多说,上代码:
先创建一个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+" </a>";
if(Page<maxPage){
strHtml=strHtml+"<a class=\"change_page\" href='"+url+"?Page="+(Page+1)+"'>下一页</a>"
+ " <a class=\"change_page\" href='"+url+"?Page="+maxPage+"'>最后一页 </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中的输出记录导航的字符串方法,显示导航条。
先创建一个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+" </a>";
if(Page<maxPage){
strHtml=strHtml+"<a class=\"change_page\" href='"+url+"?Page="+(Page+1)+"'>下一页</a>"
+ " <a class=\"change_page\" href='"+url+"?Page="+maxPage+"'>最后一页 </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中的输出记录导航的字符串方法,显示导航条。
相关文章推荐
- java servlet 几种页面跳转的方法,需要的朋友可以参考一下 在访问网页的过程中,页面自动刷新、跳转和重定向是经常用到的,这里就说说在Java中是如何实现这些功能的! 一、页面自动刷新
- 在页面中,我们经常看到,一个button按钮,如果属标点击,就会触发一个窗口的显示,如果二次点击并可以隐藏,那么如何通过JAVA配合html来实现这一功能呢?
- Java实现分页的前台页面和后台代码
- 前端通过Ajax请求从后台返回数据到页面显示,实现分页功能
- JAVA实现分页(前台页面+后台代码)
- 关于JavaWeb如何实现用户注册 后台即时提醒(类似站内信功能)
- Java中如何实现分页功能
- 在Java应用程序中如何实现FTP的功能
- ASP.NET实现新闻页面的分页功能[生成静态版]
- 如何在android中实现swipe的手势功能及页面拖动动画
- 如何在Java应用程序中实现copy图像功能
- 如何在Joomla! 1.5 管理后台中实现滑动分页效果 【转】
- 如何在Joomla!管理后台中实现标签页面的效果(tabs.js) 【转】
- JavaBean+Jsp 实现页面分页
- 如何在Java程序中实现FTP的上传下载功能
- 如何用C的CGI实现网页的分页显示功能?
- 如何用Java实现HTTP断点续传功能
- 如何在Java应用程序中实现FTP功能
- JAVA-如何实现TIMER功能
- PHP主机如何实现绑定多个域名,每个域名可以指向不同的页面,相当于域名绑定子目录功能。