1. 程式人生 > >java後臺如何實現頁面分頁功能

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