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+" </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中的輸出記錄導航的字串方法,顯示導航條。