在struts中分頁的一種實現 - 中國WEB開發者網絡 (http://www.webasp.net) -- 技術教程 (http://www.webasp.net/article/) --- 在struts中分頁的一種實現 (http://www.webasp.net/article/19/18064.htm) |
| -- 作者:未知 -- 發佈日期: 2005-04-28 |
| 在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 |
| webasp.net |