細(xì)心!用心!耐心!

          吾非文人,乃市井一俗人也,讀百卷書(shū),跨江河千里,故申城一游; 一兩滴辛酸,三四年學(xué)業(yè),五六點(diǎn)粗墨,七八筆買賣,九十道人情。

          BlogJava 聯(lián)系 聚合 管理
            1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks
          抱歉這篇才寫。上班沒(méi)有多少時(shí)間啊!
          TableModelBean.java 這是核心業(yè)務(wù)類,既要被Action使用又要被dwr使用。
          由于我注釋寫了一些,所以就不詳細(xì)介紹了
          public class TableModelBean {
              
              
          //表格的第一列
              public static final int COLUMN_1 = 0;
              
              
          //表格的第二列
              public static final int COLUMN_2 = 1;
              
              
          //表格的第三列
              public static final int COLUMN_3 = 2;

              
          //每一列的排序升序降序標(biāo)記 true升序,false降序
              private boolean[] columnFlags = falsefalsefalse };
              
              
          //表格分頁(yè)總頁(yè)面數(shù)
              private int totalPage = 0;
              
              
          //表格當(dāng)前頁(yè)
              private int currentPage = 0;
              
              
          //表格總行數(shù)
              private int rowsCount = 0;

              
          //沒(méi)用
              private String[] pagers = "" };

              
          //存放全體記錄的容器
              private List rows = new ArrayList();

              
          //存放當(dāng)前記錄的容器
              private List currentPageRows = new ArrayList();

              
          //數(shù)據(jù)庫(kù)操作類
              private static ModelOneDAO dao;

              
          //每頁(yè)記錄數(shù)設(shè)為20
              private static final int PAGE_SIZE = 20;

              
          //初始排序行為第一行
              private int sortedColumn = 1;

              
          /**
               *  構(gòu)造函數(shù)
               
          */

              
          public TableModelBean() {
                  dao 
          = new ModelOneDAO();
                  init();
              }


              
          /**
               *  初始化
               
          */

              
          private void init() {
                  
          try {
                      rows 
          = dao.getSortedRows(sortedColumn, columnFlags[sortedColumn]);
                      setRowsCount(rows.size());
                      setTotalPage(getTotalPageByRow(rows.size(), PAGE_SIZE));
                      setCurrentPage(
          1);
                  }
           catch (SQLException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }

              }


              
          /**
               * 返回當(dāng)前頁(yè)的內(nèi)容
               * @return Returns the currentPage.
               
          */

              
          public int getCurrentPage() {
                  
          return currentPage;
              }


              
          /**
               * 設(shè)置當(dāng)前頁(yè)
               * @param currentPage
               *            The currentPage to set.
               
          */

              
          public void setCurrentPage(int currentPage) {
                  
          this.currentPage = currentPage;

                  currentPageRows.clear();
                  
          int firstIndex = PAGE_SIZE * (currentPage - 1);
                  
          int lastIndex = (firstIndex + PAGE_SIZE) < rowsCount ? firstIndex
                          
          + PAGE_SIZE : rowsCount;
                  
          for (int i = firstIndex; i < lastIndex; i++{
                      currentPageRows.add(rows.
          get(i));
                  }

              }


              
          /**
               * 取得所有行
               * @return Returns the rows.
               
          */

              
          public List getRows() {
                  
          return rows;
              }



              
          /**
               * 取的分頁(yè)數(shù)
               * @return Returns the totalPage.
               
          */

              
          public int getTotalPage() {
                  init();
                  
          return totalPage;
              }


              
          /**
               * 設(shè)置分頁(yè)數(shù)
               * @param totalPage
               *            The totalPage to set.
               
          */

              
          public void setTotalPage(int totalPage) {
                  
          this.totalPage = totalPage;
              }


              
          /**
               * 取得紀(jì)錄數(shù)
               * @return Returns the totalRows.
               
          */

              
          public int getRowsCount() {
                  
          return rowsCount;
              }


              
          /**
               *    設(shè)置記錄數(shù)
               *  @param totalRows
               *            The totalRows to set.
               
          */

              
          public void setRowsCount(int rowsCount) {
                  
          this.rowsCount = rowsCount;
              }


              
          /**
               * 取得當(dāng)前頁(yè)中的記錄數(shù)
               * @return Returns the currentPageRows.
               
          */

              
          public List getCurrentPageRows() {
                  
          return currentPageRows;
              }


              
          /**
               * 取得page頁(yè)中的記錄,當(dāng)page大于totalPage時(shí)返回最后頁(yè)
               * 因?yàn)槭巧厦娴膅etCurrentPageRows函數(shù)的重載,所以在dwr中不能正常使用。
               * 于是出現(xiàn)了getRowsByPageNo方法。
               * @param page
               * @return the currentPageRows.
               
          */

              
          public List getCurrentPageRows(int page) {
                  currentPageRows.clear();
                  
          int firstIndex = PAGE_SIZE * (page - 1);
                  
          int lastIndex = (firstIndex + PAGE_SIZE) < rowsCount ? firstIndex
                          
          + PAGE_SIZE : rowsCount;
                  
          for (int i = firstIndex; i < lastIndex; i++{
                      currentPageRows.add(rows.
          get(i));
                  }

                  
          return currentPageRows;
              }


              
          /**
               * 取得page頁(yè)中的記錄,當(dāng)page大于totalPage時(shí)返回最后頁(yè)
               * @param page
               * @return 包含當(dāng)前頁(yè)記錄的List
               
          */

              
          public List getRowsByPageNo(int page) {
                  init();
                  page 
          = page > totalPage ? totalPage : page;
                  List result 
          = new ArrayList();
                  
          int firstIndex = PAGE_SIZE * (page - 1);
                  
          int lastIndex = (firstIndex + PAGE_SIZE) < rowsCount ? firstIndex
                          
          + PAGE_SIZE : rowsCount;
                  
          for (int i = firstIndex; i < lastIndex; i++{
                      result.add(rows.
          get(i));
                  }

                  
          return result;
              }


              
          /**
               * 按照某一列進(jìn)行排序,再返回當(dāng)前頁(yè)中的數(shù)據(jù)
               * @param currentPage
               * @param columnNo
               * @return the Rows of current Page that sorted by columnNo
               
          */

              
          public List getCurrentPageSortedByColumnRows(int currentPage, int columnNo) {
                  init();
                  sortBy(columnNo);
                  currentPageRows.clear();
                  
          int firstIndex = 20 * (currentPage - 1);
                  
          int lastIndex = (firstIndex + 20< rowsCount ? firstIndex + 20
                          : rowsCount;
                  
          for (int i = firstIndex; i < lastIndex; i++{
                      currentPageRows.add(rows.
          get(i));
                  }

                  
          return currentPageRows;
              }


              
          /**
               * 返回一個(gè)分頁(yè)數(shù)組。用處不太大,客戶端用Javascript也可以計(jì)算。
               * @return Returns the pages.
               
          */

              
          public String[] getPagers() {
                  pagers 
          = new String[totalPage];
                  
          for (int i = 1; i <= totalPage; i++{
                      pagers[i 
          - 1= i + "";
                  }

                  
          return pagers;
              }


              
          /**
               * 按照某一列進(jìn)行排序
               * @param columnNo
               
          */

              
          public void sortBy(int columnNo) {
                  
          this.sortedColumn = columnNo;
                  columnFlags[columnNo] 
          = (!columnFlags[columnNo]);
                  
          try {
                      rows 
          = dao.getSortedRows(columnNo, columnFlags[columnNo]);
                  }
           catch (SQLException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }

              }


              
          /**
               * 刪除某一列,按照主鍵(第一列)
               * @param key
               * @return
               
          */

              
          public boolean deleteRow(int key) {
                  
          try {
                      dao.deleteRow(key);
                  }
           catch (SQLException e) {
                      e.printStackTrace();
                      
          return false;
                  }

                  
          return true;
              }


              
          /**
               * 要新增加一個(gè)數(shù)據(jù)前先計(jì)算出Id.
               * 這個(gè)例子只是用來(lái)演示用的,如果多人訪問(wèn)會(huì)出現(xiàn)并發(fā)問(wèn)題
               * @return
               
          */

              
          public int getNextId() {
                  
          try {
                      
          return dao.getNextId();
                  }
           catch (SQLException e) {
                      e.printStackTrace();
                      
          return -1;
                  }

              }


              
          /**
               * 增加一行
               * @param trb
               * @return
               
          */

              
          public boolean addRow(TableRowBean trb) {
                  
          try {
                      dao.addRow(trb);
                      
          return true;
                  }
           catch (SQLException e) {
                      e.printStackTrace();
                      
          return false;
                  }

              }


              
          /**
               * 更改一行
               * @param trb
               * @return
               
          */

              
          public boolean updateRow(TableRowBean trb) {
                  
          try {
                      dao.updateRow(trb);
                      
          return true;
                  }
           catch (SQLException e) {
                      e.printStackTrace();
                      
          return false;
                  }

              }


              
          /**
               * 按照key取回單行信息
               * @param key
               * @return
               
          */

              
          public TableRowBean getSingleRow(int key) {
                  TableRowBean row;
                  
          try {
                      row 
          = dao.getSingleRow(key);
                  }
           catch (SQLException e) {
                      row 
          = new TableRowBean();
                      e.printStackTrace();
                  }

                  
          return row;
              }


              
          /**
               * 輔助方法計(jì)算分頁(yè)數(shù)
               * @param rowSize
               * @param pageSize
               * @return
               
          */

              
          private static int getTotalPageByRow(int rowSize, int pageSize) {
                  
          int result = 0;
                  result 
          = rowSize % pageSize == 0 ? rowSize / pageSize : rowSize
                          
          / pageSize + 1;
                  
          return result;
              }

          }
          接下來(lái)就是寫配置文件了。主要的配置文件有三個(gè)web.xml struts-config.xml dwr.xml
          web.xml
          <?xml version="1.0" encoding="ISO-8859-1"?>
          <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
                                   "http://java.sun.com/dtd/web-app_2_3.dtd"
          >
          <web-app>
              
          <filter>
                  
          <filter-name>EncodingFilter</filter-name>
                  
          <filter-class>org.mstar.strutsajax.EncodingFilter</filter-class>
                  
          <init-param>
                          
          <param-name>encoding</param-name>
                          
          <param-value>gb2312</param-value>
                  
          </init-param>
              
          </filter>
              
          <servlet>
                  
          <servlet-name>action</servlet-name>
                  
          <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
                  
          <init-param>
                      
          <param-name>config</param-name>
                      
          <param-value>/WEB-INF/struts-config.xml</param-value>
                  
          </init-param>
                  
          <load-on-startup>1</load-on-startup>
              
          </servlet>
              
          <servlet>
                  
          <servlet-name>dwr-invoker</servlet-name>
                  
          <display-name>DWR Servlet</display-name>
                  
          <description>Direct Web Remoter Servlet</description>
                  
          <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
                  
          <init-param>
                      
          <param-name>config</param-name>
                      
          <param-value>WEB-INF/dwr.xml</param-value>
                  
          </init-param>
                  
          <init-param>
                      
          <param-name>debug</param-name>
                      
          <param-value>true</param-value>
                  
          </init-param>
                  
          <load-on-startup>1</load-on-startup>
              
          </servlet>
              
          <servlet-mapping>
                  
          <servlet-name>action</servlet-name>
                  
          <url-pattern>*.do</url-pattern>
              
          </servlet-mapping>
              
          <servlet-mapping>
                  
          <servlet-name>dwr-invoker</servlet-name>
                  
          <url-pattern>/dwr/*</url-pattern>
              
          </servlet-mapping>
              
          <welcome-file-list>
                  
          <welcome-file>index.jsp</welcome-file>
                  
          <welcome-file>login.jsp</welcome-file>
              
          </welcome-file-list>
              
          <taglib>
                  
          <taglib-uri>/WEB-INF/struts-bean</taglib-uri>
                  
          <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
              
          </taglib>
              
          <taglib>
                  
          <taglib-uri>/WEB-INF/struts-logic</taglib-uri>
                  
          <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
              
          </taglib>
              
          <taglib>
                  
          <taglib-uri>/WEB-INF/struts-html</taglib-uri>
                  
          <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
              
          </taglib>
          </web-app>
          其中要注意這段Servlet的聲明
          <servlet>
                  
          <servlet-name>dwr-invoker</servlet-name>
                  
          <display-name>DWR Servlet</display-name>
                  
          <description>Direct Web Remoter Servlet</description>
                  
          <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
                  
          <init-param>
                      
          <param-name>config</param-name>
                      
          <param-value>WEB-INF/dwr.xml</param-value>
                  
          </init-param>
                  
          <init-param>
                      
          <param-name>debug</param-name>
                      
          <param-value>true</param-value>
                  
          </init-param>
                  
          <load-on-startup>1</load-on-startup>
              
          </servlet>
          debug打開(kāi)的話,你就可以看到每一個(gè)遠(yuǎn)程調(diào)用。對(duì)開(kāi)發(fā)很有用。
          struts-config我就不寫了,大家對(duì)這個(gè)比較了解,要看的話,下載我的源碼,在最后面我會(huì)寫上。
          重點(diǎn)是dwr.xml.這里是你要提供遠(yuǎn)程接口信息
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">

          <dwr>
              
          <init>
                  
          <converter id="tablerowbean" class="org.mstar.strutsajax.converter.TableRowConverter"/>
                
          </init>
              
          <allow>
                  
          <create creator="new" javascript="UserLogic">
                      
          <param name="class" value="org.mstar.strutsajax.ajax.UserLogic"/>
                      
          <include method="validate"/>
                  
          </create>
                  
          <create creator="new" javascript="TableModel" scope="session">
                      
          <param name="class" value="org.mstar.strutsajax.form.TableModelBean"/>
                      
          <include method="sortBy"/>
                      
          <include method="getRowsCount"/>
                      
          <include method="getTotalPage"/>
                      
          <include method="setCurrentPage"/>
                      
          <include method="getCurrentPageRows"/>
                      
          <include method="getCurrentPageSortedByColumnRows"/>
                      
          <include method="getRowsByPageNo"/>
                      
          <include method="deleteRow"/>
                      
          <include method="getNextId"/>
                      
          <include method="addRow"/>
                      
          <include method="updateRow"/>
                      
          <include method="getSingleRow"/>
                  
          </create>
                  <convert converter="tablerowbean" match="org.mstar.strutsajax.form.TableRowBean"/>
              
          </allow>
          </dwr>
          詳細(xì)配置你可以看dwr的文檔。
          這里要說(shuō)的就是,convert,對(duì)于你自己的類型如TableRowBean必須寫一個(gè)Converter來(lái)轉(zhuǎn)化它,我的TableRowConverter其實(shí)就是繼承與BeanConverter然后什么事情也沒(méi)做。但是我如果自己用BeanConverter就不行,不知道為什么。其他的都比較好理解。
          當(dāng)然我還有一個(gè)weblogic.xml,因?yàn)槲沂前l(fā)布在weblogic上的。
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN"    "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
          <weblogic-web-app>
              
          <jsp-descriptor>
                  
          <jsp-param>
                      
          <param-name>debug</param-name>
                      
          <param-value>true</param-value>
                  
          </jsp-param>
              
          </jsp-descriptor>
              
          <context-root>struts-ajax</context-root>
          </weblogic-web-app>
          剩下了就是JSP頁(yè)面了。我再寫一篇吧。
          posted on 2007-04-16 15:31 張金鵬 閱讀(392) 評(píng)論(0)  編輯  收藏 所屬分類: AJAX技術(shù)
          主站蜘蛛池模板: 伊金霍洛旗| 和平区| 翁源县| 临清市| 广元市| 越西县| 东港市| 秭归县| 余庆县| 仙游县| 丰都县| 芮城县| 溧阳市| 平顶山市| 凯里市| 秦安县| 卓尼县| 张家川| 陇西县| 乃东县| 德庆县| 四子王旗| 五峰| 高台县| 永州市| 葫芦岛市| 沈阳市| 香格里拉县| 榕江县| 尤溪县| 永川市| 沙洋县| 都安| 阿巴嘎旗| 奎屯市| 梨树县| 金乡县| 攀枝花市| 庄浪县| 顺平县| 铁岭县|