对于ssh框架来说的话分页,主要的思想就是dao层完成对数据库的操作,service层对业务进行管理,action对页面进行管理。

分页需要的bean。

 

 
  
  1. import java.util.List;  
  2. public class PageBean {  
  3.          private List list;  
  4.     private int allRow;// 总记录数  
  5.     private int totalPage;// 总页数  
  6.     private int currentPage;// 当前页  
  7.     private int pageSize;// 每页记录数  
  8.            private boolean isFirstPage;// 是否为第一页  
  9.     private boolean isLastPage;// 是否为最后一页  
  10.     private boolean hasPreviousPage;// 是否有前一页  
  11.     private boolean hasNextPage;// 是否有下一页  
  12.  
  13.     public List getList() {  
  14.         return list;  
  15.     }  
  16.  
  17.     public void setList(List list) {  
  18.         this.list = list;  
  19.     }  
  20.  
  21.     public void setFirstPage(boolean isFirstPage) {  
  22.         this.isFirstPage = isFirstPage;  
  23.     }  
  24.  
  25.     public void setLastPage(boolean isLastPage) {  
  26.         this.isLastPage = isLastPage;  
  27.     }  
  28.  
  29.     public void setHasPreviousPage(boolean hasPreviousPage) {  
  30.         this.hasPreviousPage = hasPreviousPage;  
  31.     }  
  32.  
  33.     public void setHasNextPage(boolean hasNextPage) {  
  34.         this.hasNextPage = hasNextPage;  
  35.     }  
  36.  
  37.       
  38.  
  39.     public int getAllRow() {  
  40.         return allRow;  
  41.     }  
  42.  
  43.     public void setAllRow(int allRow) {  
  44.         this.allRow = allRow;  
  45.     }  
  46.  
  47.     public int getTotalPage() {  
  48.         return totalPage;  
  49.     }  
  50.  
  51.     public void setTotalPage(int totalPage) {  
  52.         this.totalPage = totalPage;  
  53.     }  
  54.  
  55.     public int getCurrentPage() {  
  56.         return currentPage;  
  57.     }  
  58.  
  59.     public void setCurrentPage(int currentPage) {  
  60.         this.currentPage = currentPage;  
  61.     }  
  62.  
  63.     public int getPageSize() {  
  64.         return pageSize;  
  65.     }  
  66.  
  67.     public void setPageSize(int pageSize) {  
  68.         this.pageSize = pageSize;  
  69.     }  
  70.  
  71.       
  72.  
  73.     //   /** *//**  
  74.     //    * 初始化分页信息  
  75.     //    */  
  76.     public void init() {  
  77.         this.isFirstPage = isFirstPage();  
  78.         this.isLastPage = isLastPage();  
  79.         this.hasPreviousPage = isHasPreviousPage();  
  80.         this.hasNextPage = isHasNextPage();  
  81.     }  
  82.  
  83.     //   /** *//**  
  84.     //    * 以下判断页的信息,只需getter方法(is方法)即可  
  85.     //    * @return  
  86.     //    */  
  87.     //     
  88.     public boolean isFirstPage() {  
  89.         return currentPage == 1;// 如是当前页是第1页  
  90.     }  
  91.  
  92.     public boolean isLastPage() {  
  93.         return currentPage == totalPage;// 如果当前页是最后一页  
  94.     }  
  95.  
  96.     public boolean isHasPreviousPage() {  
  97.         return currentPage != 1;// 只要当前页不是第1页  
  98.     }  
  99.  
  100.     public boolean isHasNextPage() {  
  101.         return currentPage != totalPage;// 只要当前页不是最后1页  
  102.     } //    
  103.  
  104.     //    
  105.     //   /** *//**  
  106.     //    * 计算总页数,静态方法,供外部直接通过类名调用  
  107.     //    * @param pageSize 每页记录数  
  108.     //    * @param allRow 总记录数  
  109.     //    * @return 总页数  
  110.     //    */  
  111.     public static int countTotalPage(final int pageSize, final int allRow) {  
  112.         int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow  
  113.                 / pageSize + 1;  
  114.         return totalPage;  
  115.     }  
  116.  
  117.     //   /** *//**  
  118.          //     *这个方法的逻辑非常关键,如果不弄清的话,在dao层调用的时候会出现不必要的麻烦。  
  119.     //    * 计算当前页开始记录  
  120.     //    * @param pageSize 每页记录数  
  121.     //    * @param currentPage 当前第几页  
  122.     //    * @return 当前页开始记录号  
  123.     //    */  
  124.     public static int countOffset(final int pageSize, final int currentPage) {  
  125.           
  126.         int offset = pageSize * (currentPage - 1);  
  127.                 if(offset<=0){  
  128.                     return offset = 0;  
  129.                 }  
  130.                       
  131.         return offset;  
  132.     }  
  133.  
  134.     //    
  135.     //   /** *//**  
  136.     //    * 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替  
  137.     //    * @param page 传入的参数(可能为空,即0,则返回1)  
  138.     //    * @return 当前页  
  139.     //    */  
  140.     public static int countCurrentPage(int page) {  
  141.         final int curPage = (page == 0 ? 1 : page);  
  142.         return curPage;  
  143.     }  
  144. }  

dao层代码:

 

 
  
  1. package test;  
  2.  
  3. import java.sql.SQLException;  
  4. import java.util.List;  
  5.  
  6. import org.hibernate.HibernateException;  
  7. import org.hibernate.Query;  
  8. import org.hibernate.Session;  
  9. import org.springframework.orm.hibernate3.HibernateCallback;  
  10. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
  11.  
  12. public class MemberDaoImpl extends HibernateDaoSupport implements MemberDao {  
  13. /*    //实现的接口自己写就可以了    
  14.          
  15.       *//** *//**   
  16.        * 分页查询   
  17.        * @param hql 查询的条件   
  18.        * @param offset 开始记录   
  19.        * @param length 一次查询几条记录   
  20.        * @return   
  21.        *//*   
  22. */  
  23.     public List queryForPage(final String hql, final int offset,  
  24.             final int length) {  
  25.         List list = getHibernateTemplate().executeFind(new HibernateCallback() {  
  26.             public Object doInHibernate(Session session) throws  
  27.  
  28.             HibernateException, SQLException {  
  29.                 Query query = session.createQuery(hql);  
  30.                 query.setFirstResult(offset);  
  31.                 query.setMaxResults(length);  
  32.                 List list = query.list();  
  33.                 return list;  
  34.             }  
  35.         });  
  36.         return list;  
  37.     }  
  38.  
  39.     public int getAllRowCount(String hql) {  
  40.         return getHibernateTemplate().find(hql).size();  
  41.  
  42.     }  
  43.  
  44. }  

action:

 

 
  
  1. public class ListAction extends ActionSupport {  
  2.     // 通过applicationContext.xml配置文件注入memberService的值  
  3.     private FenyeService fenyeservice ;  
  4.  
  5.     public void setFenyeService (FenyeService fenyeservice ) {  
  6.         this.fenyeservice = fenyeservice ;  
  7.     }  
  8.          public FenyeService  getFenyeService (FenyeService   fenyeservice ){  
  9.                    return fenyeservice   
  10. }  
  11.     private int page;// 第几页  
  12.  
  13.     private PageBean pageBean;// 包含分布信息的bean  
  14.  
  15.     public int getPage() {  
  16.         return page;  
  17.     }  
  18.  
  19.     public void setPage(int page) {// 若URL中无此参数,会默认为第1页  
  20.         this.page = page;  
  21.     }  
  22.  
  23.     public PageBean getPageBean() {  
  24.         return pageBean;  
  25.     }  
  26.  
  27.     public void setPageBean(PageBean pageBean) {  
  28.         this.pageBean = pageBean;  
  29.     }  
  30.  
  31.     @Override  
  32.     public String execute() throws Exception {  
  33.         // 分页的pageBean,参数pageSize表示每页显示记录数,page为当前页  
  34.         this.pageBean = fenyeservice .queryForPage(3, page);  
  35.         return SUCCESS;  
  36.     }  

jsp页面的话就是<s:iterator value="pagebean.list">迭代标签了.<s:property value="list内的名字">

差不多就这些了。如果还有什么疑问的话可以给我留言,我尽快给你答复.