Struts2.0 +Hibernate 分页

原文地址:http://yangchao20020.blog.163.com/blog/static/4838224720106844427282/


一、hibernate部分
Java代码

   package com.ada.dao.impl;  
    
   import org.hibernate.Criteria;  
   import org.hibernate.criterion.Projections;  
    
   import com.ada.bean.Page;  
    
    
   public class MyDAOSupport {  
         
       /** 分页查询方法 
        * ada 2010-6-28 
        * @param cri:查询条件对象 
        * @param page:分页对象 
        * @return page:分页对象 
        */ 
       protected Page getQueryPage(Criteria cri,Page page){  
                 
           int count = ((Long)cri.setProjection(Projections.rowCount()).uniqueResult()).intValue();  
           cri.setProjection(null);  
           page.setSumcount(count);//总记录数   
           int pagenum=count/page.getPagesize();  
           if(count%page.getPagesize()!=0)  
               pagenum+=1;  
           page.setPagecount(pagenum);//总页数  
           int startNo=(page.getCurpage()-1)*page.getPagesize();  
           int endNo=startNo+page.getPagesize();  
    
           cri.setFirstResult(startNo);  
           cri.setMaxResults(endNo);  
         
           page.setResult(cri.list());  
           return page;  
    
       }  
   } 

      



调用例子:
Java代码

  package com.ada.dao.impl;  
   
  import java.util.List;  
   
  import org.hibernate.Criteria;  
  import org.hibernate.Query;  
  import org.hibernate.Session;  
   
  import com.ada.bean.Page;  
  import com.ada.bean.User;  
  import com.ada.dao.UserDAO;  
  import com.ada.util.HibernateUtil;  
   
  public class UserDAOImpl extends MyDAOSupport implements UserDAO {  
   
      public Page queryUserPages(Page page) {  
            
          Session s=null;  
          try{  
              s=HibernateUtil.getSession();  
              Criteria cri = s.createCriteria(User.class);  
              return getQueryPage(cri,page);  
          }finally{  
              if(s!=null)  
                  s.close();  
          }  
      }  
   
           public Page queryUserPagesByDeptid(String deptid,Page page){  
          Session s=null;  
          try{  
              s=HibernateUtil.getSession();  
              Criteria cri = s.createCriteria(User.class);  
              cri.add(Restrictions.eq("deptid",Long.valueOf(deptid)));  
              return getQueryPage(cri,page);  
          }finally{  
              if(s!=null)  
                  s.close();  
          }  
      }  
   
   
  } 

      



分页对象
Java代码

   package com.ada.bean;  
    
   import java.util.List;  
    
   public class Page {  
       private int pagesize;//每页显示个数  
       private int curpage;//当前页  
       private int pagecount;//总页数  
       private int sumcount;//总记录数  
       private List result;  
    
       public int getSumcount() {  
           return sumcount;  
       }  
       public void setSumcount(int sumcount) {  
           this.sumcount = sumcount;  
       }  
       public int getPagecount() {  
           return pagecount;  
       }  
       public void setPagecount(int pagecount) {  
           this.pagecount = pagecount;  
       }  
       public int getCurpage() {  
           return curpage;  
       }  
       public void setCurpage(int curpage) {  
           this.curpage = curpage;  
       }  
         
       public int getPagesize() {  
           return pagesize;  
       }  
       public void setPagesize(int pagesize) {  
           this.pagesize = pagesize;  
       }  
       public List getResult() {  
           return result;  
       }  
       public void setResult(List result) {  
           this.result = result;  
       }  
    
   } 

二、struts部分

显示效果:
Struts2.0 +Hibernate 分页 - K.Y.Chill - 没 有 不 可 能
包含3个文件:
1.PageTag.java

Java代码

   package com.adaq.tag;  
    
   import javax.servlet.http.HttpServletRequest;  
   import javax.servlet.http.HttpServletResponse;  
    
   import org.apache.struts2.components.Component;  
   import org.apache.struts2.views.jsp.ComponentTagSupport;  
    
   import com.opensymphony.xwork2.util.ValueStack;  
    
   /** 自定义分页标签 
    * @author Ada 
    */ 
   public class PageTag extends ComponentTagSupport {     
         
       //private static final long serialVersionUID = 7242423813230124088L;     
       //这里传递的参数需要用字符串的形式     
       private String pageNo; //当前页数    
       private String total; //总记录数   
       private String pagesize;//每页显示个数  
       private String pagecount;//页数  
       private String pageaction;     
       
       public void setPageNo(String pageNo) {     
           this.pageNo = pageNo;     
       }     
       
       public void setTotal(String total) {     
           this.total = total;     
       }       
       
       @Override    
       public Component getBean(ValueStack arg0, HttpServletRequest arg1,     
               HttpServletResponse arg2) {     
           return new Pages(arg0);     
       }     
       
       protected void populateParams() {     
           super.populateParams();     
       
           Pages pages = (Pages) component;     
           pages.setPageNo(pageNo);        
           pages.setTotal(total);     
           pages.setPagecount(pagecount);  
           pages.setPagesize(pagesize);  
           pages.setPageaction(pageaction);  
       
       }  
    
       public String getPagesize() {  
           return pagesize;  
       }  
    
       public void setPagesize(String pagesize) {  
           this.pagesize = pagesize;  
       }  
    
       public String getPagecount() {  
           return pagecount;  
       }  
    
       public void setPagecount(String pagecount) {  
           this.pagecount = pagecount;  
       }  
    
       public String getPageaction() {  
           return pageaction;  
       }  
    
       public void setPageaction(String pageaction) {  
           this.pageaction = pageaction;  
       }     
   }   

 


2.Pages.java

Java代码

   package com.adaq.tag;  
    
   import java.io.IOException;  
   import java.io.Writer;  
   import java.util.Map;  
    
   import org.apache.struts2.StrutsStatics;  
   import org.apache.struts2.components.Component;  
   import org.apache.struts2.dispatcher.StrutsRequestWrapper;  
    
   import com.opensymphony.xwork2.util.ValueStack;  
    
   /** 自定义分页标签 
    * @author Ada 
    */ 
   public class Pages extends Component {     
           
       private String pageNo; //当前页数    
       private String total; //总记录数   
       private String pagesize;//每页显示个数  
       private String pagecount;//页数    
       private String pageaction;      
       
          
       
       public String getPageaction() {  
           return pageaction;  
       }  
    
       public void setPageaction(String pageaction) {  
           this.pageaction = pageaction;  
       }  
    
       public String getPageNo() {     
           return pageNo;     
       }     
       
       public void setPageNo(String pageNo) {     
           this.pageNo = pageNo;     
       }     
       
       public String getTotal() {     
           return total;     
       }     
       
       public void setTotal(String total) {     
           this.total = total;     
       }     
       
       public Pages(ValueStack arg0) {     
           super(arg0);     
       }     
       
       @Override    
       public boolean start(Writer writer) {     
       
           boolean result = super.start(writer);     
           StringBuilder str = new StringBuilder();     
           Map<String, Object> cont = stack.getContext();     
           StrutsRequestWrapper req = (StrutsRequestWrapper) cont     
                   .get(StrutsStatics.HTTP_REQUEST);     
      
           // 从ValueStack中取出数值     
           Object obj = stack.findValue(pageNo);     
           pageNo = String.valueOf(obj);     
           obj = stack.findValue(total);     
           total = String.valueOf(obj);    
           obj = stack.findValue(pagesize);     
           pagesize = String.valueOf(obj);    
           obj = stack.findValue(pagecount);     
           pagecount = String.valueOf(obj);    
             
           //用于计算的当前页整数形式     
           int cpageInt = Integer.valueOf(pageNo);     
           str.append("<div class='pagination'>");     
           Integer totalInt = Integer.valueOf(total);  
           Integer pagesizeInt = Integer.valueOf(pagesize);  
           Integer pagecountInt = Integer.valueOf(pagecount);  
       
           //分页状态显示  
           if(totalInt==0){  
               str.append("<span class='current'>共" +totalInt+  
                       "条记录 每页显示" +pagesize+  
                       "条 共" +pagecount+  
                       "页 </span> ");  
           }else{  
               str.append("<span class='current'>共" +totalInt+  
                       "条记录 每页显示" +pagesize+  
                       "条 第" +cpageInt+  
                       "页/共" +pagecount+  
                       "页 </span> ");  
           }  
           if(totalInt == 1 || totalInt == 0){  
               str.append("<span class='disabled'>首页 上一页 下一页 末页</span>");  
           }else{   
               if(cpageInt==1){  
                   str.append("<span class='disabled'>首页 上一页 </span>");  
               }else{  
                    str.append("<a href='");     
                  str.append(pageaction);    
                  str.append("?page.curpage=1");   
                  str.append("'>首页</a> ");  
                  str.append("<a href='");     
                  str.append(pageaction);     
                  str.append("?page.curpage=");     
                  str.append(cpageInt - 1);     
                  str.append("'>上一页</a> ");   
             }  
             if(cpageInt==pagecountInt){  
                 str.append("<span class='disabled'>下一页 末页</span>");  
             }else{  
                  str.append("<a href='");     
                  str.append(pageaction);     
                  str.append("?page.curpage=");  
                  str.append(cpageInt + 1);  
                  str.append("'>下一页</a> ");  
                  str.append("<a href='");     
                  str.append(pageaction);     
                  str.append("?page.curpage=");     
                  str.append(pagecountInt);     
                  str.append("'>末页</a>");   
             }  
         }     
     
         str.append("</div>");     
     
         try {     
             writer.write(str.toString());     
         } catch (IOException e) {     
             // TODO Auto-generated catch block     
             e.printStackTrace();     
         }     
     
         return result;     
     }  
  
     public String getPagesize() {  
         return pagesize;  
     }  
  
     public void setPagesize(String pagesize) {  
         this.pagesize = pagesize;  
     }  
  
     public String getPagecount() {  
         return pagecount;  
     }  
  
     public void setPagecount(String pagecount) {  
         this.pagecount = pagecount;  
     }     
 }   

 


3.page.tld

Xml代码

   <?xml version="1.0" encoding="UTF-8"?>    
   <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"     
                           "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">    
   <taglib>          
       <tlib-version>2.2.3</tlib-version>          
       <jsp-version>1.2</jsp-version>          
       <short-name>p</short-name>          
       <uri>/p</uri>          
       <display-name>"pages Tags"</display-name>          
                  
           <tag>          
               <name>pages</name>          
               <tag-class>com.adaq.tag.PageTag</tag-class>           
               <body-content>empty</body-content>          
               <attribute>           
                   <name>pageNo</name>          
                   <required>true</required>          
                   <rtexprvalue>true</rtexprvalue>          
               </attribute>          
               <attribute>          
                   <name>total</name>          
                   <required>true</required>          
                   <rtexprvalue>true</rtexprvalue>          
               </attribute> 
               <attribute>          
                   <name>pagesize</name>          
                   <required>true</required>          
                   <rtexprvalue>true</rtexprvalue>          
               </attribute>   
               <attribute>          
                   <name>pagecount</name>          
                   <required>true</required>          
                   <rtexprvalue>true</rtexprvalue>          
               </attribute>     
               <attribute>          
                   <name>pageaction</name>          
                   <required>true</required>          
                   <rtexprvalue>true</rtexprvalue>          
               </attribute>    
           </tag>          
   </taglib>  

 



调用例子:

Html代码

   <%@ taglib prefix="p" uri="/WEB-INF/page.tld"%> 
   ...  
   <p:pages pageNo="page.curpage" pagesize="page.pagesize"   pagecount="page.pagecount" total="page.sumcount"  pageaction="flowAction!page"/> 

      


      其中:
      pageNo:当前页数
      pagesize:每页显示记录数
      pagecount:总页数
      total:总记录数
      pageaction:分页查询action


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值