struts2 分页

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了...

你可能感兴趣的:(struts2)