现在的位置: 首页 > 综合 > 正文

struts2 分页

2013年06月18日 ⁄ 综合 ⁄ 共 13038字 ⁄ 字号 评论关闭

http://sonyfe25cp.javaeye.com/blog/263026

分页模块在参考完无数个版本之后总算自己做出一个自己的版本了...

Pager类:

Java代码 复制代码
  1. package bit.dlde.marx.util;   
  2.   
  3. import java.math.*;   
  4.   
  5. public class NewPager {   
  6.     private int totalRows; //总行数   
  7.     private int pageSize = 10//每页显示的行数   
  8.     private int currentPage; //当前页号   
  9.     private int totalPages; //总页数   
  10.     private int startRow; //当前页在数据库中的起始行   
  11.        
  12.     public NewPager() {   
  13.     }   
  14.        
  15.     /**默认每页10个  
  16.      * @param _totalRows  
  17.      */  
  18.     public NewPager(int _totalRows) {   
  19.         totalRows = _totalRows;   
  20.         totalPages=totalRows/pageSize;   
  21. //        System.out.println("总共的页数:"+totalPages);   
  22.         int mod=totalRows%pageSize;   
  23.         if(mod>0){   
  24.             totalPages++;   
  25.         }   
  26.         currentPage = 1;   
  27.         startRow = 0;   
  28.     }   
  29.        
  30.        
  31.     /**可自定义每页显示多少数  
  32.      * @param _totalRows  
  33.      * @param _pageSize  
  34.      */  
  35.     public NewPager(int _totalRows, int _pageSize) {   
  36.         totalRows = _totalRows;   
  37.         pageSize = _pageSize;   
  38.         totalPages = totalRows / pageSize;   
  39.         // System.out.println("总共的页数:"+totalPages);   
  40.         int mod = totalRows % pageSize;   
  41.         if (mod > 0) {   
  42.             totalPages++;   
  43.         }   
  44.         currentPage = 1;   
  45.         startRow = 0;   
  46.     }   
  47.        
  48.       
  49.     public void first() {   
  50.         currentPage = 1;   
  51.         startRow = 0;   
  52.     }   
  53.     public void previous() {   
  54.         if (currentPage == 1) {   
  55.             return;   
  56.         }   
  57.         currentPage--;   
  58.         startRow = (currentPage - 1) * pageSize;   
  59.     }   
  60.     public void next() {   
  61.         if (currentPage < totalPages) {   
  62.             currentPage++;   
  63.         }   
  64.         startRow = (currentPage - 1) * pageSize;   
  65.     }   
  66.     public void last() {   
  67.         currentPage = totalPages;   
  68.         startRow = (currentPage - 1) * pageSize;   
  69.     }   
  70.     public void refresh(int _currentPage) {   
  71.         currentPage = _currentPage;   
  72.         if (currentPage > totalPages) {   
  73.             last();   
  74.         }   
  75.     }   
  76.        
  77.        
  78.        
  79.        
  80.        
  81.        
  82.        
  83.     public int getStartRow() {   
  84.         return startRow;   
  85.     }   
  86.     public int getTotalPages() {   
  87.         return totalPages;   
  88.     }   
  89.     public int getCurrentPage() {   
  90.         return currentPage;   
  91.     }   
  92.     public int getPageSize() {   
  93.         return pageSize;   
  94.     }   
  95.     public void setTotalRows(int totalRows) {   
  96.         this.totalRows = totalRows;   
  97.     }   
  98.     public void setStartRow(int startRow) {   
  99.         this.startRow = startRow;   
  100.     }   
  101.     public void setTotalPages(int totalPages) {   
  102.         this.totalPages = totalPages;   
  103.     }   
  104.     public void setCurrentPage(int currentPage) {   
  105.         this.currentPage = currentPage;   
  106.     }   
  107.     public void setPageSize(int pageSize) {   
  108.         this.pageSize = pageSize;   
  109.     }   
  110.     public int getTotalRows() {   
  111.         return totalRows;   
  112.     }   
  113. }  
package bit.dlde.marx.util;

import java.math.*;

public class NewPager {
    private int totalRows; //总行数
    private int pageSize = 10; //每页显示的行数
    private int currentPage; //当前页号
    private int totalPages; //总页数
    private int startRow; //当前页在数据库中的起始行
    
    public NewPager() {
    }
    
    /**默认每页10个
     * @param _totalRows
     */
    public NewPager(int _totalRows) {
        totalRows = _totalRows;
        totalPages=totalRows/pageSize;
//        System.out.println("总共的页数:"+totalPages);
        int mod=totalRows%pageSize;
        if(mod>0){
            totalPages++;
        }
        currentPage = 1;
        startRow = 0;
    }
    
    
    /**可自定义每页显示多少数
     * @param _totalRows
     * @param _pageSize
     */
    public NewPager(int _totalRows, int _pageSize) {
		totalRows = _totalRows;
		pageSize = _pageSize;
		totalPages = totalRows / pageSize;
		// System.out.println("总共的页数:"+totalPages);
		int mod = totalRows % pageSize;
		if (mod > 0) {
			totalPages++;
		}
		currentPage = 1;
		startRow = 0;
	}
    
   
    public void first() {
        currentPage = 1;
        startRow = 0;
    }
    public void previous() {
        if (currentPage == 1) {
            return;
        }
        currentPage--;
        startRow = (currentPage - 1) * pageSize;
    }
    public void next() {
        if (currentPage < totalPages) {
            currentPage++;
        }
        startRow = (currentPage - 1) * pageSize;
    }
    public void last() {
        currentPage = totalPages;
        startRow = (currentPage - 1) * pageSize;
    }
    public void refresh(int _currentPage) {
        currentPage = _currentPage;
        if (currentPage > totalPages) {
            last();
        }
    }
    
    
    
    
    
    
    
    public int getStartRow() {
        return startRow;
    }
    public int getTotalPages() {
        return totalPages;
    }
    public int getCurrentPage() {
        return currentPage;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setTotalRows(int totalRows) {
        this.totalRows = totalRows;
    }
    public void setStartRow(int startRow) {
        this.startRow = startRow;
    }
    public void setTotalPages(int totalPages) {
        this.totalPages = totalPages;
    }
    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public int getTotalRows() {
        return totalRows;
    }
}

PageService 类:

Java代码 复制代码
  1. package bit.dlde.marx.util;   
  2.   
  3. public class NewPagerService {   
  4.     /**   
  5.      * 功能描述:使用默认参数的  
  6.      * <br>输入:  
  7.      * <br>输出:  
  8.      * <br>创建日期:Nov 6, 2008  
  9.     */  
  10.     public NewPager getPager(String currentPage,String pagerMethod,int totalRows) {   
  11.         //    定义pager对象,用于传到页面   
  12.         NewPager pager = new NewPager(totalRows);   
  13. //      System.out.println("执行到getPager了");   
  14.         //    如果当前页号为空,表示为首次查询该页   
  15.         //    如果不为空,则刷新pager对象,输入当前页号等信息   
  16.         if (currentPage != null) {   
  17.             pager.refresh(Integer.parseInt(currentPage));   
  18. //            System.out.println("确认完当前的currentPage");   
  19.         }else{   
  20. //          currentPage="1";   
  21.             pager.refresh(1);   
  22.         }   
  23.         //    获取当前执行的方法,首页,前一页,后一页,尾页。   
  24. //        System.out.println("当前要执行的页面动作为:"+pagerMethod);   
  25.         if (pagerMethod != null) {   
  26.             if (pagerMethod.equals("first")) {   
  27.                 pager.first();   
  28.             } else if (pagerMethod.equals("previous")) {   
  29.                 pager.previous();   
  30.             } else if (pagerMethod.equals("next")) {   
  31.                 pager.next();   
  32.             } else if (pagerMethod.equals("last")) {   
  33.                 pager.last();   
  34.             }   
  35.         }else{   
  36.             pager.first();   
  37.         }   
  38.         return pager;   
  39.     }   
  40.     /**   
  41.      * 功能描述:可自定义每页显示书目的  
  42.      * <br>输入:  
  43.      * <br>输出:  
  44.      * <br>创建日期:Nov 6, 2008  
  45.     */  
  46.     public NewPager getPager(String currentPage,String pagerMethod,int totalRows,int pageSize) {   
  47.         //    定义pager对象,用于传到页面   
  48.         NewPager pager = new NewPager(totalRows,pageSize);   
  49. //      System.out.println("执行到getPager了");   
  50.         //    如果当前页号为空,表示为首次查询该页   
  51.         //    如果不为空,则刷新pager对象,输入当前页号等信息   
  52.         if (currentPage != null) {   
  53.             pager.refresh(Integer.parseInt(currentPage));   
  54. //            System.out.println("确认完当前的currentPage");   
  55.         }else{   
  56. //          currentPage="1";   
  57.             pager.refresh(1);   
  58.         }   
  59.         //    获取当前执行的方法,首页,前一页,后一页,尾页。   
  60. //        System.out.println("当前要执行的页面动作为:"+pagerMethod);   
  61.         if (pagerMethod != null) {   
  62.             if (pagerMethod.equals("first")) {   
  63.                 pager.first();   
  64.             } else if (pagerMethod.equals("previous")) {   
  65.                 pager.previous();   
  66.             } else if (pagerMethod.equals("next")) {   
  67.                 pager.next();   
  68.             } else if (pagerMethod.equals("last")) {   
  69.                 pager.last();   
  70.             }   
  71.         }else{   
  72.             pager.first();   
  73.         }   
  74.         return pager;   
  75.     }   
  76.   
  77. }  
package bit.dlde.marx.util;

public class NewPagerService {
	/** 
	 * 功能描述:使用默认参数的
	 * <br>输入:
	 * <br>输出:
	 * <br>创建日期:Nov 6, 2008
	*/
	public NewPager getPager(String currentPage,String pagerMethod,int totalRows) {
        //    定义pager对象,用于传到页面
		NewPager pager = new NewPager(totalRows);
//		System.out.println("执行到getPager了");
        //    如果当前页号为空,表示为首次查询该页
        //    如果不为空,则刷新pager对象,输入当前页号等信息
        if (currentPage != null) {
            pager.refresh(Integer.parseInt(currentPage));
//            System.out.println("确认完当前的currentPage");
        }else{
//        	currentPage="1";
        	pager.refresh(1);
        }
        //    获取当前执行的方法,首页,前一页,后一页,尾页。
//        System.out.println("当前要执行的页面动作为:"+pagerMethod);
        if (pagerMethod != null) {
            if (pagerMethod.equals("first")) {
                pager.first();
            } else if (pagerMethod.equals("previous")) {
                pager.previous();
            } else if (pagerMethod.equals("next")) {
                pager.next();
            } else if (pagerMethod.equals("last")) {
                pager.last();
            }
        }else{
        	pager.first();
        }
        return pager;
    }
	/** 
	 * 功能描述:可自定义每页显示书目的
	 * <br>输入:
	 * <br>输出:
	 * <br>创建日期:Nov 6, 2008
	*/
	public NewPager getPager(String currentPage,String pagerMethod,int totalRows,int pageSize) {
        //    定义pager对象,用于传到页面
		NewPager pager = new NewPager(totalRows,pageSize);
//		System.out.println("执行到getPager了");
        //    如果当前页号为空,表示为首次查询该页
        //    如果不为空,则刷新pager对象,输入当前页号等信息
        if (currentPage != null) {
            pager.refresh(Integer.parseInt(currentPage));
//            System.out.println("确认完当前的currentPage");
        }else{
//        	currentPage="1";
        	pager.refresh(1);
        }
        //    获取当前执行的方法,首页,前一页,后一页,尾页。
//        System.out.println("当前要执行的页面动作为:"+pagerMethod);
        if (pagerMethod != null) {
            if (pagerMethod.equals("first")) {
                pager.first();
            } else if (pagerMethod.equals("previous")) {
                pager.previous();
            } else if (pagerMethod.equals("next")) {
                pager.next();
            } else if (pagerMethod.equals("last")) {
                pager.last();
            }
        }else{
        	pager.first();
        }
        return pager;
    }

}

调用示例:

Java代码 复制代码
  1. /**   
  2.      * 功能描述:前台列表  
  3.      * <br>输入:  
  4.      * <br>输出:  
  5.      * <br>创建日期:Nov 6, 2008  
  6.     */  
  7.     public String ExpListForFront() throws Exception {   
  8.         int totalRow = expServ.getTotalRowsNum();   
  9.         System.out.println(totalRow+" :totalRow");   
  10.         pager = pagerService.getPager(this.getCurrentPage(), this  
  11.                 .getPagerMethod(), totalRow,36);//前台页面一页36个   
  12.         this.setCurrentPage(String.valueOf(pager.getCurrentPage()));   
  13.         this.setTotalRows(String.valueOf(totalRow));   
  14.         availableItems = expServ.getRows(pager.getPageSize(), pager.getStartRow());   
  15.         System.out.println("准备显示专家列表");   
  16.         List<Experts> explistemp = new ArrayList<Experts>();   
  17.         for (Experts es : availableItems) {   
  18.             es.setName(CharacterTrans.trans8859_1ToGBK(es.getName()));   
  19.                 es.setResume(CharacterTrans.trans8859_1ToGBK(es.getResume()));   
  20.                 es.setPhoto(CharacterTrans.trans8859_1ToGBK(es.getPhoto()));   
  21.                 es.setEditor(CharacterTrans.trans8859_1ToGBK(es.getEditor()));   
  22.                 es.getExpertType().setTempname(CharacterTrans.trans8859_1ToGBK(es.getExpertType().getName()));   
  23.             explistemp.add(es);   
  24.         }   
  25.         this.setItEx(explistemp.iterator());   
  26.         System.out.println("显示专家列表完毕");   
  27.         return SUCCESS;   
  28.     }  
/** 
	 * 功能描述:前台列表
	 * <br>输入:
	 * <br>输出:
	 * <br>创建日期:Nov 6, 2008
	*/
	public String ExpListForFront() throws Exception {
		int totalRow = expServ.getTotalRowsNum();
		System.out.println(totalRow+" :totalRow");
		pager = pagerService.getPager(this.getCurrentPage(), this
				.getPagerMethod(), totalRow,36);//前台页面一页36个
		this.setCurrentPage(String.valueOf(pager.getCurrentPage()));
		this.setTotalRows(String.valueOf(totalRow));
		availableItems = expServ.getRows(pager.getPageSize(), pager.getStartRow());
		System.out.println("准备显示专家列表");
		List<Experts> explistemp = new ArrayList<Experts>();
		for (Experts es : availableItems) {
			es.setName(CharacterTrans.trans8859_1ToGBK(es.getName()));
				es.setResume(CharacterTrans.trans8859_1ToGBK(es.getResume()));
				es.setPhoto(CharacterTrans.trans8859_1ToGBK(es.getPhoto()));
				es.setEditor(CharacterTrans.trans8859_1ToGBK(es.getEditor()));
				es.getExpertType().setTempname(CharacterTrans.trans8859_1ToGBK(es.getExpertType().getName()));
			explistemp.add(es);
		}
		this.setItEx(explistemp.iterator());
		System.out.println("显示专家列表完毕");
		return SUCCESS;
	}

页面上设置:

Java代码 复制代码
  1. <div id="pageflip">   
  2.                 共   
  3.                 <s:property value="totalRows" />   
  4.                 行&nbsp; 第   
  5.                 <s:property value="currentPage" />   
  6.                 页&nbsp; 共   
  7.                 <s:property value="pager.getTotalPages()" />   
  8.                 页&nbsp;   
  9.                 <a   
  10.                     href="<s:url value="expListForFront.action">   
  11.                          <s:param name="currentPage" value="currentPage"/>   
  12.                          <s:param name="pagerMethod" value="'first'"/>   
  13.                     </s:url>">首页</a>   
  14.                 <a   
  15.                     href="<s:url value="expListForFront.action">   
  16.                          <s:param name="currentPage" value="currentPage"/>   
  17.                          <s:param name="pagerMethod" value="'previous'"/>   
  18.                      </s:url>">上一页</a>   
  19.                 <a   
  20.                     href="<s:url value="expListForFront.action">   
  21.                          <s:param name="currentPage" value="currentPage"/>   
  22.                          <s:param name="pagerMethod" value="'next'"/>   
  23.                      </s:url>">下一页</a>   
  24.                 <a   
  25.                     href="<s:url value="expListForFront.action">   
  26.                          <s:param name="currentPage" value="currentPage"/>   
  27.                           <s:param name="pagerMethod" value="'last'"/>   
  28.                     </s:url>">尾页</a>   
  29.             </div>  
<div id="pageflip">
				共
				<s:property value="totalRows" />
				行&nbsp; 第
				<s:property value="currentPage" />
				页&nbsp; 共
				<s:property value="pager.getTotalPages()" />
				页&nbsp;
				<a
					href="<s:url value="expListForFront.action">
               			 <s:param name="currentPage" value="currentPage"/>
               			 <s:param name="pagerMethod" value="'first'"/>
                    </s:url>">首页</a>
				<a
					href="<s:url value="expListForFront.action">
               			 <s:param name="currentPage" value="currentPage"/>
               			 <s:param name="pagerMethod" value="'previous'"/>
           			 </s:url>">上一页</a>
				<a
					href="<s:url value="expListForFront.action">
               			 <s:param name="currentPage" value="currentPage"/>
              			 <s:param name="pagerMethod" value="'next'"/>
           			 </s:url>">下一页</a>
				<a
					href="<s:url value="expListForFront.action">
               			 <s:param name="currentPage" value="currentPage"/>
              			  <s:param name="pagerMethod" value="'last'"/>
            		</s:url>">尾页</a>
			</div>

这样就OK了...

抱歉!评论已关闭.