在struts中分页的一种实现

 

 

我的项目中的分页功能

1,  思路

 

使用一个页面控制类,它记录页面信息,如上页,下页,当前页等。在查询的Action中,将这个控制类和查询条件一起传递给数据库访问bean,然后将这两个参数保存在用户session中。在分页控制Action中,利用接收到的分页参数调用数据库访问的bean.

 

 

2,实现

 

(1)分页控制类

/* @author nick

 * Created on 2004-3-18

 * file name:PageController.java

 *

 *

 */

package com.tower.util;

 

/**

 * @author nick

 * 2004-3-18

 * 用来进行翻页控制

 *

 */

public class PageController {

    int totalRowsAmount; //总行数

    boolean rowsAmountSet; //是否设置过totalRowsAmount

    int pageSize=2;   //每页行数

    int currentPage=1; //当前页码

    int nextPage;

    int previousPage;

    int totalPages;  //总页数

    boolean hasNext;  //是否有下一页

    boolean hasPrevious; //是否有前一页

    String description;

    int pageStartRow;

    int pageEndRow;

   

    public PageController(int totalRows){

        setTotalRowsAmount(totalRows);

    }

    public PageController(){}

   

 

 

 

 

    /**

     * @param i

     * 设定总行数

     */

    public void setTotalRowsAmount(int i) {

        if(!this.rowsAmountSet){

           totalRowsAmount = i;

           totalPages=totalRowsAmount/pageSize+1;

           setCurrentPage(1);

           this.rowsAmountSet=true;

       }

      

    }

 

    /**

     * @param i

     *

     * 当前页

     *

     */

    public void setCurrentPage(int i) {

        currentPage = i;

        nextPage=currentPage+1;

        previousPage=currentPage-1;

       //计算当前页开始行和结束行

        if(currentPage*pageSize<totalRowsAmount){

           pageEndRow=currentPage*pageSize;

           pageStartRow=pageEndRow-pageSize+1;

          

        }else{

           pageEndRow=totalRowsAmount;

           pageStartRow=pageSize*(totalPages-1)+1;

       }

      

      

       //是否存在前页和后页

      

       if (nextPage>totalPages){

           hasNext=false;

        }else{

           hasNext=true;

       }

        if(previousPage==0){

          hasPrevious=false;

        }else{

           hasPrevious=true;

       };

        System.out.println(this.description());

    }

 

    /**

     * @return

     */

    public int getCurrentPage() {

        return currentPage;

    }

 

    /**

     * @return

     */

    public boolean isHasNext() {

        return hasNext;

    }

 

    /**

     * @return

     */

    public boolean isHasPrevious() {

        return hasPrevious;

    }

 

    /**

     * @return

     */

    public int getNextPage() {

        return nextPage;

    }

 

    /**

     * @return

     */

    public int getPageSize() {

        return pageSize;

    }

 

    /**

     * @return

     */

    public int getPreviousPage() {

        return previousPage;

    }

 

    /**

     * @return

     */

    public int getTotalPages() {

        return totalPages;

    }

 

    /**

     * @return

     */

    public int getTotalRowsAmount() {

        return totalRowsAmount;

    }

 

    /**

     * @param b

     */

    public void setHasNext(boolean b) {

        hasNext = b;

    }

 

    /**

     * @param b

     */

    public void setHasPrevious(boolean b) {

        hasPrevious = b;

    }

 

    /**

     * @param i

     */

    public void setNextPage(int i) {

        nextPage = i;

    }

 

    /**

     * @param i

     */

    public void setPageSize(int i) {

        pageSize = i;

    }

 

    /**

     * @param i

     */

    public void setPreviousPage(int i) {

        previousPage = i;

    }

 

    /**

     * @param i

     */

    public void setTotalPages(int i) {

        totalPages = i;

    }

    /**

     * @return

     */

    public int getPageEndRow() {

        return pageEndRow;

    }

 

    /**

     * @return

     */

    public int getPageStartRow() {

        return pageStartRow;

    }

 

    public String getDescription(){

       String description="Total:"+this.getTotalRowsAmount()+

       " items "+this.getTotalPages() +" pages";

//     this.currentPage+" Previous "+this.hasPrevious +

//     " Next:"+this.hasNext+

//     " start row:"+this.pageStartRow+

//     " end row:"+this.pageEndRow;

       return description;

    }

   

    public String description(){

       String description="Total:"+this.getTotalRowsAmount()+

       " items "+this.getTotalPages() +" pages,Current page:"+

       this.currentPage+" Previous "+this.hasPrevious +

       " Next:"+this.hasNext+

       " start row:"+this.pageStartRow+

       " end row:"+this.pageEndRow;

       return description;

    }

   

   

    public static void main(String args[]){

        PageController pc=new PageController(3);

        System.out.println(pc.getDescription());

//        pc.setCurrentPage(2);

//      System.out.println(pc.description());

//      pc.setCurrentPage(3);

//      System.out.println(pc.description());

    }

 

 

}

 

2)查询Action的代码片断

 

    public ActionForward execute(

        ActionMapping mapping,

        ActionForm form,

        HttpServletRequest request,

        HttpServletResponse response)

        throws Exception {

       Base queryForm= (Base) form;

          

        if(!queryForm.getName().equals("")){

           PageController pc=new PageController();        

            EmployeeBase service=new EmployeeBase();      

            ArrayList result=(ArrayList)service.search(queryForm,pc);

          

            HttpSession session=request.getSession();

           

           session.setAttribute("queryForm",queryForm);

            session.setAttribute("pageController",service.getPageController());

          

            request.setAttribute("queryResult",result);   

           request.setAttribute("pageController",service.getPageController());       

           return mapping.findForward("haveResult");

        }else{

           return mapping.findForward("noResult");

        }

      

      

      

   

    }

 

3),翻页Action的代码片断

 

public ActionForward execute(

        ActionMapping mapping,

        ActionForm form,

        HttpServletRequest request,

        HttpServletResponse response)

        throws Exception {

   

          

        //读取翻页参数

              

        TurnPageForm turnPageForm=(TurnPageForm)form;

      

       //PageController中取出查询信息,并使用bean提供的调用接口处理结果

        

        HttpSession session=request.getSession();

        PageController pc=(PageController)session.getAttribute("pageController");    

       Base queryForm=(Base)session.getAttribute("queryForm");

      

   

        pc.setCurrentPage(turnPageForm.getViewPage());

      

        EmployeeBase service=new EmployeeBase();

      

        ArrayList result=(ArrayList)service.search(queryForm,pc);

      

       //根据参数将数据写入 request

      

        request.removeAttribute("queryResult");

        request.removeAttribute("pageController");

        request.setAttribute("queryResult",result);   

        request.setAttribute("pageController",pc);

              

        //forward 到显示页面

      

      

      

        return mapping.findForward("haveResult");

      

      

      

      

   

    }

 

4)数据库访问bean中的片断

 

public Collection search(Base base, PageController pc)

        throws SQLException {

        ArrayList emps = new ArrayList();

        ResultSet rs = getSearchResult(base);

 

        rs.absolute(-1);

        pc.setTotalRowsAmount(rs.getRow());

        setPageController(pc);

       if (rs.getRow() > 0) {

 

           rs.absolute(pc.getPageStartRow());

 

 

           do {

               System.out.println("in loop" + rs.getRow());

 

               Base b = new Base();

               b.setName(rs.getString("Name"));

               b.setIdCard(rs.getString("IDCard"));

               System.out.println("From db:" + rs.getString("IDCard"));

               emps.add(b);

               if (!rs.next()) {

                   break;

               }

           } while (rs.getRow() < (pc.getPageEndRow() + 1));

       }

        return emps;

    }

 

 

(5)jsp中,翻页部分的代码片断

 

<bean:write name="pageController" property="description"/>

      

        <logic:equal name="pageController" property="hasPrevious" value="true">

              <a href="turnPage.do?viewPage=<bean:write name="pageController" property="previousPage"/>" class="a02">

                Previous

             </a>

        </logic:equal>

 

        <logic:equal name="pageController" property="hasNext" value="true">

          <a href="turnPage.do?viewPage=<bean:write name="pageController" property="nextPage"/>" class="a02">

          Next

          </a>

        </logic:equal>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值