关于分页经验不是很多,让我来做分页,我习惯用这样的一种方法,以前用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)  编辑  收藏 所属分类: Struts1Spring个人学习日记Hibernate

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问