關(guān)于分頁(yè)經(jīng)驗(yàn)不是很多,讓我來(lái)做分頁(yè),我習(xí)慣用這樣的一種方法,以前用ASP和PHP的時(shí)候也是這樣來(lái)處理的。也沒(méi)怎么認(rèn)真去檢查是否科學(xué),不過(guò)先做出來(lái)再說(shuō),交出一個(gè)不怎么好的作品總比交不出作品好。不好的話還可以去完善和優(yōu)化嘛。
首先,先創(chuàng)建一個(gè)顯示每一頁(yè)(有若干條數(shù)據(jù))的方法(如下面的hfindAll方法),決定好每一頁(yè)接收一個(gè)頁(yè)碼參數(shù),然后顯示該頁(yè)碼里的數(shù)據(jù)。比如有100條數(shù)據(jù),那么分10頁(yè),那第幾頁(yè)顯示第幾條至第幾條數(shù)據(jù)。然后再創(chuàng)建一個(gè)方法是用于在view層顯示頁(yè)數(shù)(如下面的amountPage方法),最后是在view層上為每一頁(yè)數(shù)的數(shù)字加上超鏈接。
以下是主要代碼:
public class LoginDAO extends HibernateDaoSupport {
private int PageSize =5;
/*設(shè)置每頁(yè)的數(shù)據(jù)條數(shù)*/
public Integer amountPage(){
Session session =this.getSession();
Query query = session.createQuery("from Login");
query.setCacheable(true);
int a = query.list().size()%PageSize;
/*總記錄數(shù)/每頁(yè)數(shù)據(jù)數(shù),判斷是否能整除*/
Integer amount;
if(a!=0){
amount = query.list().size()/PageSize+1;
/*如果整除有余數(shù),則頁(yè)數(shù)加1*/
}else{
amount = query.list().size()/PageSize;
/*如果整除沒(méi)余數(shù),則直接總記錄數(shù)/每頁(yè)數(shù)據(jù)數(shù)*/
}
return amount;
}
public List hfindAll(String pagenum) {
Session session =this.getSession();
Query query = session.createQuery("from Login");
if (pagenum == null){
/*如果pagenum是空,則數(shù)據(jù)從第一條開(kāi)始*/
query.setFirstResult(0);
/*設(shè)置查詢開(kāi)始的第幾條數(shù)據(jù),這里是從第1條開(kāi)始*/
query.setMaxResults(PageSize);
/*設(shè)置查詢數(shù)據(jù)條數(shù),這里是5條*/
query.setCacheable(true);
/*設(shè)置一級(jí)緩存*/
}else{
Integer p = (Integer.valueOf(pagenum)-1) * PageSize;
query.setFirstResult(p);
query.setMaxResults(PageSize);
query.setCacheable(true);
}
return query.list();
}
}
然后需要解決的是一些數(shù)據(jù)傳遞,類(lèi)型轉(zhuǎn)換和在view層顯示的問(wèn)題,主要代碼如下:
在ACTION里:
String strpagenum = request.getParameter("pagenum");
List results= loginManage.hfind(strpagenum);
Integer amountPage = loginManage.amountPage();
if(results!=null){
HttpSession session=request.getSession();
session.setAttribute("results",results);
session.setAttribute("amountPage",amountPage);
return mapping.findForward("ok");
}
return mapping.findForward("fail");
在view視圖里:
顯示每頁(yè)數(shù)據(jù)的代碼:
<logic:iterate id="element" name="results"> <tr>
<td width="100"><input type="checkbox" name="select" value="<bean:write name="element" property="id"/>"><bean:write name="element" property="id"/></td>
<td width="100"><bean:write name="element" property="name"/> </td>
<td width="100"><bean:write name="element" property="password"/></td>
</tr></logic:iterate>
顯示頁(yè)碼的代碼:
<%
int i;
int a=Integer.parseInt(session.getAttribute("amountPage").toString());
for (i=1;i<=a;i++){
out.println("<tr>");
out.println("<td><a href='display.do?pagenum="+ i +"'>"+ i +"</a></td>");
out.println("</tr>");
}
%>