| 
         
     
     | 
     | 
    
  
    | 
    在struts中分页的一种实现 | 
   
  
     | 
   
  
     | 
   
  
    | 
     作者:未知  来源:月光软件站  加入时间:2005-6-5 月光软件站  | 
   
  
    作者:未知     文章来源:http://www.jspcn.net/ 访问次数: 次    加入时间:2005-01-19    在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>
 
 
  这样一来,翻页的功能可以以你喜欢的方式表现给client
  
 
  | 
   
  
     | 
   
  
     相关文章:相关软件:  | 
   
   
      |