关于分页经验不是很多,让我来做分页,我习惯用这样的一种方法,以前用ASP和PHP的时候也是这样来处理的。也没怎么认真去检查是否科学,不过先做出来再说,交出一个不怎么好的作品总比交不出作品好。不好的话还可以去完善和优化嘛。
首先,先创建一个显示每一页(有若干条数据)的方法(如下面的hfindAll方法),决定好每一页接收一个页码参数,然后显示该页码里的数据。比如有100条数据,那么分10页,那第几页显示第几条至第几条数据。然后再创建一个方法是用于在view层显示页数(如下面的amountPage方法),最后是在view层上为每一页数的数字加上超链接。
以下是主要代码:
public class LoginDAO extends HibernateDaoSupport {
private int PageSize =5;
/*设置每页的数据条数*/
public Integer amountPage(){
Session session =this.getSession();
Query query = session.createQuery("from Login");
query.setCacheable(true);
int a = query.list().size()%PageSize;
/*总记录数/每页数据数,判断是否能整除*/
Integer amount;
if(a!=0){
amount = query.list().size()/PageSize+1;
/*如果整除有余数,则页数加1*/
}else{
amount = query.list().size()/PageSize;
/*如果整除没余数,则直接总记录数/每页数据数*/
}
return amount;
}
public List hfindAll(String pagenum) {
Session session =this.getSession();
Query query = session.createQuery("from Login");
if (pagenum == null){
/*如果pagenum是空,则数据从第一条开始*/
query.setFirstResult(0);
/*设置查询开始的第几条数据,这里是从第1条开始*/
query.setMaxResults(PageSize);
/*设置查询数据条数,这里是5条*/
query.setCacheable(true);
/*设置一级缓存*/
}else{
Integer p = (Integer.valueOf(pagenum)-1) * PageSize;
query.setFirstResult(p);
query.setMaxResults(PageSize);
query.setCacheable(true);
}
return query.list();
}
}
然后需要解决的是一些数据传递,类型转换和在view层显示的问题,主要代码如下:
在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视图里:
显示每页数据的代码:
<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>
显示页码的代码:
<%
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>");
}
%>
posted on 2008-01-10 18:55
lzj520 阅读(2940)
评论(6) 编辑 收藏 所属分类:
Struts1 、
Spring 、
个人学习日记 、
Hibernate