<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 104,  comments - 34,  trackbacks - 0

    一 開發(fā)環(huán)境

    Elicpse+Struts Studio+SqlServer2000+Tomcat。

    二 開發(fā)思路

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

    1 建立適當(dāng)?shù)哪P徒M件,對應(yīng)你要查詢數(shù)據(jù)庫中的表。這部分由我們熟悉的javaBean來充當(dāng)。并在其中建立數(shù)據(jù)庫查詢方法,該方法需要一個java.sql.Conntection類型的參數(shù),并返回一個ArrayList。在本例中為 Book.java

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

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

    4建立視圖組件,這部分由jsp來充當(dāng),為了不出現(xiàn)java 代碼,我們使用Struts提供的標(biāo)簽庫,主要負(fù)責(zé)從request中取出剛剛放入的對象,通過反復(fù)調(diào)用PageListAction以及action參數(shù),而實現(xiàn)分頁顯示。本例中為pagetest.jsp.

    5 建立并配置struts-config.xml。

    6 建立數(shù)據(jù)庫。

    三 實例代碼

    1 Book.java

    package bean;
    import java.sql.*;
    import java.util.ArrayList;
    /**
     * @作者 李敏強
     * Struts分頁顯示數(shù)據(jù)Bean,對應(yīng)數(shù)據(jù)庫中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 數(shù)據(jù)查詢已完成!");
          while(resultSet.next())
          { 
            String name = resultSet.getString("name");
            String author = resultSet.getString("author");
            String price = resultSet.getString("price");
            System.out.println("開始數(shù)據(jù)封裝: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("數(shù)據(jù)庫異常"+e.toString());
       }

          return arrayList;
     }
    }

    2 PageBean.java

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

     int currentPage=1;  //當(dāng)前頁
    public int totalPages=0;  //總頁數(shù)
     int pageRecorders=5;//每頁5條數(shù)據(jù)
     int totalRows=0;  //總數(shù)據(jù)數(shù)
     int pageStartRow=0;//每頁的起始數(shù)
     int pageEndRow=0;  //每頁顯示數(shù)據(jù)的終止數(shù)
     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()正在執(zhí)行;");
     System.out.println("參數(shù)currentPage="+currentPage);

     if((currentPage-1)>0)
     {
      hasPreviousPage=true;
     }
        else
        {
         hasPreviousPage=false;
        }
     
     if(currentPage>=totalPages)
     {
      hasNextPage=false;
     }
     else
     {
      hasNextPage=true;
     }
     System.out.println("參數(shù)hasNextPage="+hasNextPage);
     System.out.println("準(zhǔn)備執(zhí)行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()開始執(zhí)行;");
     
     
     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("要顯示的頁面數(shù)據(jù)已經(jīng)封裝,具體信息如下:");
     this.description();
     return books;
    }

    public String toString(int temp)
    {
    String str=Integer.toString(temp);
    return str;
    }

    public void description()
    {

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

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

       "當(dāng)前頁數(shù)為:"+this.getCurrentPage()+
      
       " 是否有前一頁: "+this.isHasPreviousPage() +

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

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

       " 終止行數(shù):"+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")){ //第一次讀取數(shù)據(jù)
    try{
    DataSource datasource=this.getDataSource(request,Constants.DATASOURCE_KEY);   
    arrayList=Book.getAllBook(datasource.getConnection());
    System.out.println("第一步,數(shù)據(jù)已經(jīng)成功傳遞到Action,action="+action);
       }catch(Exception e){
              e.printStackTrace();
      System.out.println("數(shù)據(jù)庫連接出現(xiàn)異常");
          }
      
         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("參數(shù)action="+action);
      System.out.println("函數(shù)pb.getNextPage()準(zhǔn)備執(zhí)行");
      Book[]books=pb.getNextPage();
      request.setAttribute("page",pb);
     request.setAttribute("result",books);  
        }
    if(action=="previousPage" || action.equals("previousPage"))
      {
      System.out.println("參數(shù)action="+action);
      System.out.println("函數(shù)pb.getPreviouspage()準(zhǔn)備執(zhí)行");
      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>
    共有數(shù)據(jù)總數(shù)<bean:write name="page" property="totalRows"/>;
    共分<bean:write name="page" property="totalPages"/>頁,當(dāng)前是第
    <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數(shù)據(jù)庫,以及表book(name,author,parce);其中數(shù)據(jù)的配置可以根據(jù)你的不同情況在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 2007-08-09 01:01 末日風(fēng)情 閱讀(979) 評論(2)  編輯  收藏 所屬分類: struts

    FeedBack:
    # re: 解決Struts 分頁顯示
    2007-08-26 09:49 | pure
    在struts中分頁有兩種結(jié)構(gòu):
    1. 在Action中通過DAO查詢出所有的記錄,然后加到session或request對象中,傳到客戶端,由JSP進行分頁。
    這種方法對于在數(shù)據(jù)量少的時候很方便,也不影響速度。
    2.在Action中每次通過DAO只查詢出一頁的記錄,再傳給JSP頁面。
    這種結(jié)構(gòu)對于數(shù)據(jù)量大的程序很好,但對于數(shù)據(jù)量小的情況,會增加對服務(wù)器的請求,加大服務(wù)器的負(fù)載。
      回復(fù)  更多評論
      
    # re: 解決Struts 分頁顯示
    2007-08-29 17:34 | dreamstone
    其實可以折中一下,比如一次查出200條記錄,不足200的話就有多少是多少。然后存到j(luò)ava端來分頁。不過這個分頁的頁數(shù)和一次查出數(shù)之間需要根據(jù)經(jīng)驗來算比例。比如80%的人需要翻3頁,每頁20 那一次查出60就好了。讓大多數(shù)人查一次。


      回復(fù)  更多評論
      

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


    網(wǎng)站導(dǎo)航:
     
    <2007年8月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品国产电影午夜| 亚洲一区二区三区免费| 日本一区二区三区免费高清| 99热在线免费观看| 久久久久成人精品免费播放动漫| 久久久精品免费国产四虎| A级毛片高清免费视频在线播放| 免费毛片在线看不用播放器| 日本在线免费观看| 6080午夜一级毛片免费看6080夜福利| 一级毛片免费不卡在线| 1000部无遮挡拍拍拍免费视频观看 | 国产福利在线免费| 青苹果乐园免费高清在线| 精品国产免费一区二区| 国产成人免费ā片在线观看 | 久久国产乱子伦精品免费不卡| 久久久久免费看黄a级试看| 69视频在线观看高清免费| 精品久久久久成人码免费动漫| 午夜网站免费版在线观看| 免费在线视频一区| 亚洲精品色午夜无码专区日韩| 亚洲AV无码专区亚洲AV伊甸园 | 亚洲熟女乱综合一区二区| 亚洲精品国产美女久久久| 亚洲网站视频在线观看| 伊人久久五月丁香综合中文亚洲| 国产亚洲精品第一综合| 拍拍拍无挡视频免费观看1000| 永久在线观看www免费视频| 在线播放高清国语自产拍免费 | 免费jlzzjlzz在线播放视频| 亚洲精品乱码久久久久久蜜桃不卡 | 亚洲国产精品xo在线观看| 亚洲欧美日韩综合久久久| 一区二区三区免费精品视频| 99热免费在线观看| 日本免费一区尤物| 亚洲av中文无码乱人伦在线r▽| 亚洲免费在线视频播放|