空間站

          北極心空

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks

          解決Struts分頁顯示

          學習Struts已經有2個多月了,前幾天群里的朋友問我Struts分頁顯示的問題,覺得好像與在jsp中的差不多,但還是遇到了這樣那樣的問題,好不容易花了幾天時間把問題都搞清楚,覺得還是寫點東西跟大家分享一下的好!
          至于Struts的語法這里就不多介紹了,不懂的朋友可以先看網上的其他文章。

          一 開發環境
          Elicpse+Struts Studio+SqlServer2000+Tomcat。

          二 開發思路
          既然講的是Struts,那自然離不了MVC,分頁顯示也是如此。

          1 建立適當的模型組件,對應你要查詢數據庫中的表。這部分由我們熟悉的javaBean來充當。并在其中建立數據庫查詢方法,該方法需要一個java.sql.Conntection類型的參數,并返回一個ArrayList。在本例中為 Book.java

          2 建立分頁所需要的模型組件,也是由javaBean來充當,通過由Book中提供的ArrayList來構造。本例中為 PageBean.java.。

          3建立控制器組件,這部分由Struts 中的Action來實現。主要負責將實例化Book,并利用返回的ArrayList對象,構造PageBean。以及接收由視圖傳遞而來的action參數。從而在PageBean對象中調用不同的方法,該方法返回Book[] 對象。最后將 Book[]和PageBean放入request中。本例中為PageListAction.java。

          4建立視圖組件,這部分由jsp來充當,為了不出現java 代碼,我們使用Struts提供的標簽庫,主要負責從request中取出剛剛放入的對象,通過反復調用PageListAction以及action參數,而實現分頁顯示。本例中為pagetest.jsp.
          5 建立并配置struts-config.xml。
          6 建立數據庫。

          三 實例代碼
          1 Book.java

          package bean; 
          import java.sql.*
          import java.util.ArrayList; 
          /** 
           * @作者 李敏強 
           * Struts分頁顯示數據Bean,對應數據庫中Book表 
           
          */ 
          public class Book { 
           
          private String bookname; //書名 
           private String author;   //作者 
           private String price;    //價格 
            
          public Book(String name,String author,String price){ 
           
          this.bookname=name; 
           
          this.author=author; 
           
          this.price=price; 


           
          public String getAuthor() { 
            
          return author; 
           } 

           
          public void setAuthor(String author) { 
            
          this.author = author; 
           } 

           
          public String getBookname() { 
            
          return bookname; 
           } 

           
          public void setBookname(String bookname) { 
            
          this.bookname = bookname; 
           } 
            
           
          public String getPrice(){ 
               
          return this.price;  
           } 
            
           
          public void setPrice(String price){ 
               
          this.price=price;  
           } 
            
           
          public static ArrayList getAllBook(Connection connection){ 
             String sql
          ="select * from book"
             ArrayList arrayList 
          = new ArrayList(); 
             
          try
             Statement statement 
          = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 
             ResultSet resultSet 
          = statement.executeQuery(sql);   
                   System.out.println(
          "BookBean 數據查詢已完成!"); 
                
          while(resultSet.next()) 
                {   
                  String name 
          = resultSet.getString("name"); 
                  String author 
          = resultSet.getString("author"); 
                  String price 
          = resultSet.getString("price"); 
                  System.out.println(
          "開始數據封裝:name="+name+"author="+author+"price="+price); 
                  Book book 
          = new Book(name,author,price);        
                  arrayList.add(book); 
                } 
              connection.close(); 
              resultSet.close(); 
             }
          catch(SQLException e) 
             { 
              System.out.println(
          "數據庫異常"+e.toString()); 
             } 

                
          return arrayList; 
           } 

          2 PageBean.java

          package page; 
          import bean.Book; 
          import java.util.*
          /** 
           * @作者 李敏強 
           * Struts分頁顯示邏輯Bean 
           
          */ 
          public class PageBean { 

           
          int currentPage=1;  //當前頁 
          public int totalPages=0;  //總頁數 
           int pageRecorders=5;//每頁5條數據 
           int totalRows=0;  //總數據數 
           int pageStartRow=0;//每頁的起始數 
           int pageEndRow=0;  //每頁顯示數據的終止數 
           boolean hasNextPage=false//是否有下一頁 
           boolean hasPreviousPage=false//是否有前一頁 
           ArrayList arrayList; 
           Iterator it; 
          public PageBean(){} 
            
          public PageBean(ArrayList arrayList){ 
           
          this.arrayList=arrayList;  
           totalRows
          =arrayList.size();   
              it
          =arrayList.iterator();   
           hasPreviousPage
          =false
           currentPage
          =1
           
          if((totalRows%pageRecorders)==0
           { 
           totalPages
          =totalRows/pageRecorders;   
           } 
           
          else 
           { 
            totalPages
          =totalRows/pageRecorders+1;  
           }  
            
           
          if(currentPage>=totalPages)   
           { 
            hasNextPage
          =false;  
           } 
           
          else                         
           { 
            hasNextPage
          =true
           } 

               
              
          if(totalRows<pageRecorders)  
              { 
              
          this.pageStartRow=0;            
              
          this.pageEndRow=totalRows;    
              } 
              
          else                        
              { 
              
          this.pageStartRow=0;          
              
          this.pageEndRow=pageRecorders;    
              } 



           
          /** 
            * 
          @return Returns the currentPage. 
            
          */ 
           
          public String getCurrentPage() { 
            
          return this.toString(currentPage); 
           } 
           
          /** 
            * 
          @param currentPage The currentPage to set. 
            
          */ 
           
          public void setCurrentPage(int currentPage) { 
            
          this.currentPage = currentPage; 
           } 
           
          /** 
            * 
          @return Returns the pageRecorders. 
            
          */ 
           
          public int getPageRecorders() { 
            
          return pageRecorders; 
           } 
           
          /** 
            * 
          @param pageRecorders The pageRecorders to set. 
            
          */ 
           
          public void setPageRecorders(int pageRecorders) { 
            
          this.pageRecorders = pageRecorders; 
           } 
           
          /** 
            * 
          @return Returns the pageEndRow. 
            
          */ 
           
          public int getPageEndRow() { 
            
          return pageEndRow; 
           } 
           
          /** 
            * 
          @return Returns the pageStartRow. 
            
          */ 
           
          public int getPageStartRow() { 
            
          return pageStartRow; 
           } 
           
          /** 
            * 
          @return Returns the totalPages. 
            
          */ 
           
          public String getTotalPages() { 
            
            
          return this.toString(totalPages); 
           } 
           
          /** 
            * 
          @return Returns the totalRows. 
            
          */ 
           
          public String getTotalRows() { 
            
          return this.toString(totalRows); 
           } 
           
          /** 
            * 
          @return Returns the hasNextPage. 
            
          */ 
           
          public boolean isHasNextPage() { 
            
          return hasNextPage; 
           } 
           
          /** 
            * 
          @param hasNextPage The hasNextPage to set. 
            
          */ 
           
          public void setHasNextPage(boolean hasNextPage) { 
            
          this.hasNextPage = hasNextPage; 
           } 
           
          /** 
            * 
          @return Returns the hasPreviousPage. 
            
          */ 
           
          public boolean isHasPreviousPage() { 
            
          return hasPreviousPage; 
           } 
           
          /** 
            * 
          @param hasPreviousPage The hasPreviousPage to set. 
            
          */ 
           
          public void setHasPreviousPage(boolean hasPreviousPage) { 
            
          this.hasPreviousPage = hasPreviousPage; 
           } 
          public Book[] getNextPage(){ 
            
           currentPage
          =currentPage+1
           System.out.println(
          "PageBean.getNextPage()正在執行;"); 
           System.out.println(
          "參數currentPage="+currentPage); 

           
          if((currentPage-1)>0
           { 
            hasPreviousPage
          =true;  
           } 
              
          else 
              { 
               hasPreviousPage
          =false;  
              } 
            
           
          if(currentPage>=totalPages)  
           { 
            hasNextPage
          =false;  
           } 
           
          else 
           { 
            hasNextPage
          =true
           } 
           System.out.println(
          "參數hasNextPage="+hasNextPage); 
           System.out.println(
          "準備執行PageBean.getBooks()"); 
           Book[] books
          =getBooks(); 
           
          this.description(); 
            
           
          return books; 


          public Book[] getPreviouspage(){ 
            
           currentPage
          =currentPage-1

              
          if(currentPage==0){currentPage=1;} 
            
           
          if(currentPage>=totalPages)   
           { 
            hasNextPage
          =false;  
           } 
           
          else                          
           { 
            hasNextPage
          =true
           } 
           
          if((currentPage-1)>0
           { 
            hasPreviousPage
          =true;  
           } 
              
          else 
              { 
               hasPreviousPage
          =false;  
              } 
           Book[] books
          =getBooks(); 
           
          this.description(); 
           
          return books; 


          public Book[] getBooks(){ 
           System.out.println(
          "pageBean.getBooks()開始執行;"); 
            
            
           
          if(currentPage*pageRecorders<totalRows){//判斷是否為最后一頁 
            pageEndRow=currentPage*pageRecorders; 
               pageStartRow
          =pageEndRow-pageRecorders; 
           } 
           
          else
            pageEndRow
          =totalRows; 
            pageStartRow
          =pageRecorders*(totalPages-1); 
           } 
           Book[] books
          =new Book[pageEndRow-pageStartRow+1]; 
            
           System.out.println(
          "pageStartRow="+pageStartRow); 
           System.out.println(
          "pageEndRow="+pageEndRow); 
            
          int j=0;  
           
          for(int i=pageStartRow;i<pageEndRow;i++
           { 
            
            Book book
          =(Book)arrayList.get(i);  
            books[j
          ++]=book; 
            
           } 
           System.out.println(
          "要顯示的頁面數據已經封裝,具體信息如下:"); 
           
          this.description(); 
           
          return books; 


          public String toString(int temp) 

          String str
          =Integer.toString(temp); 
          return str; 


          public void description() 


             String description
          ="共有數據數:"+this.getTotalRows()+ 

             
          "共有頁數: "+this.getTotalPages() + 

             
          "當前頁數為:"+this.getCurrentPage()+ 
              
             
          " 是否有前一頁: "+this.isHasPreviousPage() + 

             
          " 是否有下一頁:"+this.isHasNextPage()+ 

             
          " 開始行數:"+this.getPageStartRow()+ 

             
          " 終止行數:"+this.getPageEndRow(); 

             System.out.println(description); 



          3  PageListAction.java
          package page; 
          import org.apache.struts.action.*
          import javax.servlet.http.*
          import comm.Constants; 

          import bean.Book; 
          import java.util.*
          import javax.sql.DataSource; 
          /** 
           * 
          @author 李敏強 
           * Struts分頁顯示Action 
           
          */ 
          public class PageListAction extends Action { 

           
          public PageListAction(){} 
           ArrayList arrayList
          =new ArrayList(); 
              PageBean pb; 
            
           
          public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {    
          String action;  
          action
          =request.getParameter("action");    
          if(action==null || action.equals("null")){ //第一次讀取數據 
          try
          DataSource datasource
          =this.getDataSource(request,Constants.DATASOURCE_KEY);     
          arrayList
          =Book.getAllBook(datasource.getConnection()); 
          System.out.println(
          "第一步,數據已經成功傳遞到Action,action="+action); 
             }
          catch(Exception e){ 
                    e.printStackTrace(); 
            System.out.println(
          "數據庫連接出現異常"); 
                }  
              
               pb
          =new PageBean(arrayList); 
                    Book[] books
          =pb.getBooks(); 
                    pb.description(); 
                    request.setAttribute(
          "result",books); 
                    request.setAttribute(
          "page",pb); 
                              
             } 
             
          else 
             { 
            
          if(action=="nextPage" || action.equals("nextPage")) 
            { 
            System.out.println(
          "參數action="+action); 
            System.out.println(
          "函數pb.getNextPage()準備執行"); 
            Book[]books
          =pb.getNextPage(); 
            request.setAttribute(
          "page",pb); 
           request.setAttribute(
          "result",books);    
              } 
          if(action=="previousPage" || action.equals("previousPage")) 
            { 
            System.out.println(
          "參數action="+action); 
            System.out.println(
          "函數pb.getPreviouspage()準備執行"); 
            Book[] books
          =pb.getPreviouspage();   
            request.setAttribute(
          "page",pb); 
                         request.setAttribute(
          "result",books); 
               
              } 
             } 
             
          return (mapping.findForward("success")); 
            }  

          4 pagetest.jsp
          <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> 
          <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> 
          <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> 
          <%@ page contentType="text/html; charset=gb2312" language="java"%> 

          <html:html locale="true"> 
          <head> 
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
          </head> 
          <body> 

          <table border="1"> 
          <tr><th>書名</th><th>作者</th><th>價格</th></tr> 
          <logic:present name="result"> 
          <logic:iterate id="book" name="result"  type="bean.Book" > 
          <logic:present name="book"> 
          <tr> 
           
          <td><bean:write name="book" property="bookname" /></td> 
           
          <td> <bean:write name="book" property="author" /></td> 
           
          <td><bean:write name="book" property="price" /></td> 
          </tr> 
          </logic:present> 
          </logic:iterate> 
          </logic:present> 
          </table> 
          <logic:equal name="page" property="hasNextPage" value="true"> 
          <html:link page="/page.do?action=nextPage">nextPage</html:link>  
          </logic:equal> 
          <logic:equal name="page" property="hasPreviousPage" value="true"> 
          <html:link page="/page.do?action=previousPage">PreviousPage</html:link> 
          </logic:equal> 
          共有數據總數
          <bean:write name="page" property="totalRows"/>
          共分
          <bean:write name="page" property="totalPages"/>頁,當前是第 
          <bean:write name="page" property="currentPage"/>頁 
          </body> 
          </html:html> 

          5 struts-config.xml
          <?xml version="1.0" encoding="ISO-8859-1" ?> 

          <!DOCTYPE struts-config PUBLIC 
                    "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" 
                    "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd";
          > 

          <struts-config> 
           
          <data-sources> 
            
          <data-source key="dataSource" type="org.apache.commons.dbcp.BasicDataSource"> 
             
          <set-property property="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver"/> 
             
          <set-property property="url" value="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=eBookStore;SelectMethod=cursor"/> 
             
          <set-property property="username" value="limq"/> 
             
          <set-property property="password" value="1"/> 
             
          <set-property property="maxActive" value="10"/> 
             
          <set-property property="maxWait" value="5000"/> 
             
          <set-property property="defaultAutoCommit" value="true"/> 
             
          <set-property property="defaultReadOnly" value="false"/> 
            
          </data-source> 
           
          </data-sources> 
            
          <form-beans> 
            
          </form-beans> 
            
          <global-forwards> 
            
          </global-forwards> 
            
          <action-mappings> 
            
          <action path="/page" type="page.PageListAction" scope="request"> 
            
          <forward name="success" path="/pagetest.jsp"/> 
            
          </action> 
            
          </action-mappings> 
            
          <controller> 
            
          </controller> 
          </struts-config> 
          6 建立eBookStore數據庫,以及表book(name,author,parce);其中數據的配置可以根據你的不同情況在struts-config.xml中而定。

          7 Constants.java 
          package comm; 

          /** 
           * this interface provides the constant string for applicator constant 
           
          */ 
          public class Constants { 
            
          /** 
              * name of the User Object in HttpSession 
              
          */ 
             
          public static String USER_KEY="user"
             
          /** 
              * dataSource name 
              
          */ 
             
          public static String DATASOURCE_KEY="dataSource"

          posted on 2006-11-02 14:26 蘆葦 閱讀(388) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 福海县| 扎兰屯市| 慈溪市| 会同县| 丽江市| 宁安市| 达尔| 澳门| 都昌县| 信宜市| 崇仁县| 横峰县| 台南市| 庆城县| 宜春市| 六枝特区| 邹城市| 潞城市| 梁山县| 兴海县| 永定县| 祁阳县| 淳化县| 刚察县| 南昌县| 昌邑市| 丰都县| 得荣县| 东乡| 山阳县| 鲜城| 股票| 长宁区| 扬中市| 鄢陵县| 临漳县| 苗栗市| 茶陵县| 阜宁县| 蓬安县| 胶州市|