隨筆-14  評論-0  文章-6  trackbacks-0

          在struts中分頁的一種實現
          liyun5889 轉貼? (參與分:18011,專家分:1589)?? 發表:2005-03-07 19:10?? 版本:1.0?? 閱讀:1905次


          作者:未知???? 文章來源: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
           

          posted on 2006-04-07 16:48 高遠 閱讀(124) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 潞西市| 桦南县| 威海市| 论坛| 巴彦县| 西乡县| 淮安市| 安丘市| 通渭县| 葫芦岛市| 东山县| 临武县| 岳普湖县| 荔浦县| 枣阳市| 胶南市| 临桂县| 龙泉市| 南靖县| 寻甸| 小金县| 武陟县| 宣城市| 肥乡县| 潼南县| 鞍山市| 巴中市| 扎赉特旗| 阿图什市| 中牟县| 阜城县| 吉安县| 武宣县| 栾城县| 武城县| 黔东| 手游| 奈曼旗| 衢州市| 全椒县| 遂昌县|