Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30466020
  • 博文数量: 708
  • 博客积分: 12163
  • 博客等级: 上将
  • 技术积分: 8240
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-04 20:59
文章分类

全部博文(708)

分类: Java

2008-04-03 11:33:57

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

           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">

              href="turnPage.do?viewPage=pageController" property="previousPage"/>" class="a02">

                Previous

            

        logic:equal>

 

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

          href="turnPage.do?viewPage=pageController" property="nextPage"/>" class="a02">

          Next

         

        logic:equal> 

 

这样一来,翻页的功能可以以你喜欢的方式表现给client

阅读(862) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~