当前页面: 开发资料首页 → Struts 专题 → 在struts中分页的一种实现
摘要: 在struts中分页的一种实现 作者:未知 文章来源: http://www.jspcn.net/ 访问次数: 次 加入时间:2005-01-19 在struts中分页的一种实现 我的项目中的分...
作者:未知 文章来源: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 |