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

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

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

    posts - 70,comments - 408,trackbacks - 0

        說道Struts自然是不能離開MVC模式,分頁顯示也是如此.我不知道我的算法是不是算好的,也希望看過的朋友能發表一下自己的看法,下面簡單闡述一下主要的開發思路:

    1)建立適當的模型組件,對應你要查詢數據庫中的表,這部分由熟悉的JavaBean來充當.并在其中建立數據庫查詢方法,該方法需要一個java.sql.Conntection類型的參數,并返回一個ArrayList,在本例中為Book.java,另外還有一個數據庫連接的Bean是SqlBean.java.

    2)建立分頁所需要的模型組件,也是用JavaBean,通過Book提供的ArrayList來構造,這里用的是PageBean.java.

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

    4)建立視圖組件,這部分JSP來實現,為了不出現JAVA代碼,使用Struts提供的標簽庫,主要負責從Request中取出剛剛放入的對象,通過反復調用Action以及action參數,而實現分頁顯示,是pagetest.jsp.

    5)建立并配置struts-config.xml和web.xml文件.

    6)建立數據庫.

    我對代碼進行了實現,調試通過.如果大家有更好的用Struts實現分頁顯示的算法可以給我留言,代碼如下:

    struts-config.xml文件如下,這里配置了一個接收haha的請求提交給PageListAction

     

    <?xml version="1.0" encoding="UTF-8"?>

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

    <struts-config>

     

       <action-mappings>

           <action path="/haha"

                   type="page.PageListAction"

                   scope="request">

                 <forward name="success" path="/pagetest.jsp"/>

           </action>

        </action-mappings>

       <message-resources parameter="ApplicationResources" />

    </struts-config>

    ……………………………………………………………………………….

    Web.xml文件如下,這里配置了Web的信息,基本都是由Eclipse完成的

     

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

       <servlet>

          <servlet-name>action</servlet-name>

          <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

          <init-param>

             <param-name>application</param-name>

             <param-value>ApplicationResources</param-value>

          </init-param>

          <init-param>

             <param-name>config</param-name>

             <param-value>/WEB-INF/struts-config.xml</param-value>

          </init-param>

          <init-param>

             <param-name>debug</param-name>

             <param-value>2</param-value>

          </init-param>

          <init-param>

             <param-name>detail</param-name>

             <param-value>2</param-value>

          </init-param>

          <load-on-startup>2</load-on-startup>

       </servlet>

       <servlet-mapping>

          <servlet-name>action</servlet-name>

          <url-pattern>*.do</url-pattern>

       </servlet-mapping>

       <welcome-file-list>

         <welcome-file>index.jsp</welcome-file>

         </welcome-file-list>

    </web-app>

    …………………………………………………………………………

    這個是控制器Action類

     

    package page;

    import org.apache.struts.action.*;

    import javax.servlet.http.*;

    import bean.Book;

    import java.util.*;

    import javax.sql.DataSource;

    public class PageListAction extends Action {

        ArrayList arrayList=new ArrayList();

        PageBean pd;

        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 {

                    arrayList=Book.getAllBook();

                }

                catch(Exception e) {

                    e.printStackTrace();

                }

                pd=new PageBean(arrayList);

                Book[] books=pd.getBooks();

                request.setAttribute("result",books);

                request.setAttribute("page",pd);

            }

            else {

                if(action=="nextPage"||action.equals("nextPage")) {

                    Book[] books=pd.getNextPage();

                    request.setAttribute("result",books);

                    request.setAttribute("page",pd);

                }

                if(action=="previousPage"||action.equals("previousPage")) {

                    Book[] books=pd.getPreviousPage();

                    request.setAttribute("resule",books);

                    request.setAttribute("page",pd);

                }

            }

            return mapping.findForward("success");

        }

    }

    ………………………………………………………………………………….

    這個是pagebean類,主要負責分頁算法和邏輯處理

     

    package page;

     

    import bean.Book;

    import java.util.*;

     

    public class PageBean {

        int currentPage=1;//當前頁數

        public int totalPages=0;//總頁數

        int pageRecorders=2;//每頁顯示數

        int totalRows=0;//總數據數

        int pageStartRow=0;//每頁的起始數

        int pageEndRow;//每頁的終止數

        boolean hasNextPage=false;//是否有下一頁

        boolean hasPreviousPage=false;//是否有前一頁

        ArrayList arrayList;

        Iterator it;

       

        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;

            }

        }

       

        public void setCurrentPage(int currentPage) {

            this.currentPage=currentPage;

        }

        public void setPageRecorders(int pageRecorders) {

            this.pageRecorders=pageRecorders;

        }

        public void setHasNextPage(boolean hasNextPage) {

            this.hasNextPage=hasNextPage;

        }

        public void setHasPreviosPage(boolean hasPreviosPage) {

            this.hasPreviousPage=hasPreviousPage;

        }

     

        public String getCurrentPage() {

            return this.toString(currentPage);

        }

        public String getTotalPages() {

            return this.toString(totalPages);

        }

        public String getTotalRow() {

            return this.toString(totalRows);

        }

        public int getPageRecorders() {

            return pageRecorders;

        }

        public int getPageEndRow() {

            return pageEndRow;

        }

        public int getPageStartRow() {

            return pageStartRow;

        }

        public boolean isHasNextPage() {

            return hasNextPage;

        }

        public boolean isHasPreviousPage() {

            return hasPreviousPage;

        }

       

        public Book[] getNextPage() {

            currentPage=currentPage+1;

            if((currentPage-1)>0) {

                hasPreviousPage=true;

            }

            else {

                hasPreviousPage=false;

            }

            if(currentPage>=totalPages) {

                hasNextPage=false;

            }

            else {

                hasNextPage=true;

            }

            Book[] books=getBooks();

            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();

            return books;

        }

       

        public Book[] 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];

            int j=0;

            for(int i=pageStartRow;i<pageEndRow;i++) {

                Book book=(Book)arrayList.get(i);

                books[j++]=book;

            }

            return books;

        }

       

        public String toString(int temp) {

            String str=Integer.toString(temp);

            return str;

        }

    }

    ……………………………………………………………………………….

    Book類,負責查詢數據庫,把結果放到一個ArrayList中

     

    package bean;

     

    import java.sql.*;

    import java.util.ArrayList;

     

     

    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 void setBookname(String bookname) {

            this.bookname=bookname;

        }

        public void setAuthor(String Author) {

            this.author=author;

        }

        public void setPrice(String price) {

            this.price=price;

        }

       

        public String getBookname() {

            return bookname;

        }

        public String getAuthor() {

            return author;

        }

        public String getPrice() {

            return price;

        }

       

        public static ArrayList getAllBook() throws Exception {

            String sql="select * from book";

            SqlBean sq=new SqlBean();

            ArrayList arrayList=new ArrayList();

            try

            {

                ResultSet resultSet=sq.select(sql);

                while(resultSet.next()) {

                    String name=resultSet.getString("name");

                    String author=resultSet.getString("author");

                    String price=resultSet.getString("price");

                    Book book=new Book(name,author,price);

                    arrayList.add(book);

                }

                resultSet.close();

            }

            catch(SQLException e)

            {

                System.out.println("數據庫錯誤"+e.toString());

            }

            return arrayList;

        }

    }

    ………………………………………………………………………………..

    這個是SqlBook,負責和數據庫建立一個連接的Bean

     

    package bean;

     

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.ResultSet;

    import java.sql.Statement;

     

    public class SqlBean {

        String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=eBookStore";

        Connection con=null;

        Statement sta=null;

        public SqlBean() {

            try

            {

                Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

                con=DriverManager.getConnection(url,"sa","");

                sta=con.createStatement();

            }

            catch(Exception e)

            {

                System.out.println("連接錯誤"+e.toString());

            }

        }

       

        public ResultSet select(String selects) throws Exception

        {

            return sta.executeQuery(selects);

        }

    }

    …………………………………………………………………………

    這個是負責顯示分頁的JSP頁.pagetest.jsp

     

    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>

    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>

    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>

    <%@ page contentType="text/html;charset=gb2312"%>

     

    <html:html locale="true">

      <head>

      </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:present name="page">

          <logic:equal name="page" property="hasNextPage" value="true">

            <html:link page="/haha.do?action=nextPage">nextPage</html:link>

          </logic:equal>

          <logic:equal name="page" property="hasPreviousPage" value="true">

            <html:link page="/haha.do?action=previousPage">previousPage</html:link>

          </logic:equal>

         

                 共分<bean:write name="page" property="totalPages"/>頁顯示,當前是

                     <bean:write name="page" property="currentPage"/>頁.

        </logic:present>

      </body>

    </html:html>

    …………………………………………………………………………………

    這個是首頁的JSP頁面,只有一個連接.提交一個haha.do的請求

     

    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>

    <%@ page contentType="text/html;charset=gb2312" language="java"%>

     

    <html:html>

      <head>

      </head>

      <body>

        <html:link action="haha.do">GotoPage</html:link>

      </body>

    </html:html>

    posted on 2005-11-12 09:13 我心依舊 閱讀(15119) 評論(25)  編輯  收藏

    FeedBack:
    # re: Struts分頁顯示
    2005-11-12 10:57 | blueleo
    這個分頁是一次性把數據都放在ArrayList中,如果數據量很大的話,這種方式有點欠妥。  回復  更多評論
      
    # re: Struts分頁顯示
    2006-03-01 21:43 | tomcat
    如果數據量很大的話,可以采用再次查詢的方式,
    但這也是用時間換取空間的辦法。  回復  更多評論
      
    # re: Struts分頁顯示
    2006-03-10 13:25 | 竹筍炒肉
    初步看了一下你的代碼,談談自己的看法:

    你的分頁首次查詢耗費的時間很多(特別當記錄很多時就會難以實現),但是當讀取下一頁,或者上一頁時,不用查詢數據庫,直接從第一次讀取的數據中拿出來,確實可以節省資源和時間。但是有點問題:注意ACTION是多線程的,當服務器啟動后會實例化一個對象常駐內存中,并且可以被多個線程調用,而你把PageBean對象和ArrayList對象作為ACTION的屬性放置(你也是利用了這個特性才能把首次查詢的記錄得以保留,以便當讀取下一頁時直接利用,不用每次都查詢數據庫),就會有線程之間爭奪資源的情況發生,也就是典型的線程同步問題,所以當多個線程并行訪問時會出錯。  回復  更多評論
      
    # re: Struts分頁顯示
    2006-03-16 08:16 | dalianfox
    @竹筍炒肉
    也是剛學struts,感覺竹筍炒肉說得很對。

    除了同步問題以外,感覺單人操作沒有問題,如果幾個人同時操作
    是不是互相影響呢?  回復  更多評論
      
    # re: Struts分頁顯示
    2006-04-26 11:38 |
    這種方法非常不妥,應該采取有限記錄數獲取方式。  回復  更多評論
      
    # re: Struts分頁顯示
    2006-06-26 14:48 | surfonline
    應當把記錄集放在session中,這樣就不會沖突了
    但是如果記錄數太多的話,效率就很低了  回復  更多評論
      
    # re: Struts分頁顯示
    2006-11-08 14:08 | bruce[匿名]
    我是用hibernate的分頁
    可以很方便的實現在持久層實現
    然后用struts實現
    你的前端我可以復用 只要該該后面就ok了
    寫的不錯
      回復  更多評論
      
    # re: Struts分頁顯示
    2007-04-02 22:48 | amen
    的確,上一頁時是不能查詢的,要解決應該怎么改呢??  回復  更多評論
      
    # re: Struts分頁顯示
    2007-04-12 16:17 |
    這種分頁有弊端的.因為ACTION類是單實例也為單線程當多人訪問是回出現頁面混亂  回復  更多評論
      
    # re: Struts分頁顯示[未登錄]
    2007-05-18 13:35 | 流水
    樓主你好,你的這段代碼如何重用?
    當你要實現很多不同頁面的分頁(不僅是book,還有班級,學生等),難道在pageBean中都要分別定義getStudents();getClasses();  回復  更多評論
      
    # re: Struts分頁顯示
    2007-09-17 15:57 | 同聲傳譯
    中外文水平俱佳; 英語八級或接近八級,其他語種譯者需具備相當專業水平;
    優先招聘有翻譯經驗且具有工科、財經和法律等實用性強的專業學位的兼職翻譯;
    優先招聘有時間保證且有非語言專業背景的自由職業者;
      回復  更多評論
      
    # re: Struts分頁顯示
    2007-11-07 17:23 | 尊重
    請幫忙 按照你的方法有再點擊下一頁時錯誤啊
    exception

    javax.servlet.ServletException: java.util.HashMap
    org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:810)

      回復  更多評論
      
    # re: Struts分頁顯示
    2008-05-02 20:23 |
    無法實現代碼復用,不好,我用范型改了改,可沒實現有點問題  回復  更多評論
      
    # re: Struts分頁顯示
    2008-05-08 17:01 | 剛來不久
    講的非常的詳細,對于我門這樣的,剛剛接觸,不了解的人有很大的幫助,先謝謝你了,不過聽那么多前輩說了后,我現在感覺我不知道該不該照你的方法去做了,如果誰還有更好的方法,希望他能想樓主那樣,詳細的解釋完后把具體代碼都給看看,我感覺著樣理解起來對我這樣初學者是很大的幫助,希望哪位高手如果有關這方面的代碼和詳細解說,給我一份,不勝感激!謝謝!!!

    我的郵箱:

    yzg000123@sina.com  回復  更多評論
      
    # re: Struts分頁顯示
    2008-07-14 17:54 | struts初學者
    其實我作分頁的時候也是一次性把所有的數據都放入ArrayList里面的,到現在我還在找怎樣實現這樣的效果:
    首頁 上一頁 1 2 3 4 5 下一頁 尾頁
    就是怎樣將數字遍歷上去不知道了!知道的兄弟姐妹們請發:
    qulimin1988@gmail.com
      回復  更多評論
      
    # re: Struts分頁顯示[未登錄]
    2008-07-14 20:53 | javaread.com
    真擔心數據量大的時候會怎樣。。。  回復  更多評論
      
    # re: Struts分頁顯示
    2008-07-22 14:40 | struts新手
    樓主能不能加我QQ446283171,我用你的代碼出現java.lang.NullPointerException錯誤,解決不了,急!!!  回復  更多評論
      
    # re: Struts分頁顯示
    2008-08-24 14:44 | 想瘦每一天
    getAllBook似乎不太合適。用rownum控制一下應該更好些吧?
    胡亂一說:)  回復  更多評論
      
    # re: Struts分頁顯示
    2008-09-01 11:38 |
    你的分頁也太耗性能了吧, 還是考慮一下一次取出頁面要顯示的數據  回復  更多評論
      
    # re: Struts分頁顯示
    2008-09-09 13:48 | tet
    小型應用還可以,大型應用就得考慮是不是分量查詢了  回復  更多評論
      
    # re: Struts分頁顯示
    2008-12-09 21:51 | 阿春
    非常希望您好能不能給我一個,初學者多多指教!744327541@qq.com
    masterluo@eyou.com  回復  更多評論
      
    # re: Struts分頁顯示
    2009-03-28 17:23 | Struts-page
    關于previousPage的代碼有錯誤!  回復  更多評論
      
    # re: Struts分頁顯示
    2009-03-28 18:12 | Struts-page
    request.setAttribute("resule",books);

    改為

    request.setAttribute("result",books);

    要不向前翻頁顯示不吃數據!!  回復  更多評論
      
    # re: Struts分頁顯示
    2009-06-02 00:29 | sdafd
    aaa  回復  更多評論
      
    # re: Struts分頁顯示
    2009-08-03 22:19 | mastermouse
    重用性相當差  回復  更多評論
      

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


    網站導航:
     
    主站蜘蛛池模板: 99在线精品视频观看免费| 香蕉视频在线观看免费国产婷婷| 亚洲第一视频在线观看免费| 亚洲一区二区三区免费视频| 两个人看的www免费| 亚洲国产一成久久精品国产成人综合 | 99re6在线视频精品免费下载| 午夜亚洲国产精品福利| 成人毛片免费在线观看| 亚洲伊人久久大香线蕉在观| 青青草无码免费一二三区| 中文字幕精品亚洲无线码一区应用| 亚洲日韩av无码中文| 99久久免费国产精品特黄| 亚洲国产精品日韩在线观看| **毛片免费观看久久精品| 狠狠综合久久综合88亚洲| 国产免费黄色无码视频 | 国产大片免费天天看| 亚洲精品无码日韩国产不卡?V| 亚洲av无码一区二区三区在线播放 | 亚洲第一页综合图片自拍| 日本系列1页亚洲系列| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 成人久久免费网站| 亚洲国产一区二区三区青草影视 | 亚洲成人福利在线观看| 2021久久精品免费观看| 在线亚洲高清揄拍自拍一品区| 免费观看黄网站在线播放| 亚洲精品456人成在线| 免费看美女被靠到爽的视频| 人成免费在线视频| 久久久久久久综合日本亚洲| 午夜网站在线观看免费完整高清观看| 亚洲欧洲在线观看| 一二三四免费观看在线电影| 激情婷婷成人亚洲综合| 中文字幕人成人乱码亚洲电影| 一区二区三区在线免费看| 亚洲中文字幕无码久久2020|