隨筆-34  評論-1965  文章-0  trackbacks-0

          在我早前的文章《轉換器(Converter)——Struts 2.0中的魔術師》(以下簡稱為《轉》)中,提及在Struts 1.x中實現批量封裝對象,并不是一件容易的事,這需要一些技巧。昨天,有一位同事又和我討論起這個問題,所以鑒于此場景(scenario)較為普遍,我決定寫一篇有關的文章。

          應用場景

          本文使用《轉》中的最后一個例子作為應用場景,即是批量發布產品信息。頁面輸出如下圖所示:

          圖1 發布產品
          圖1 發布產品

          圖2 查看產品
          圖2 查看產品

          具體實現

          首先創建代表產品的類tipsAndTricks.Product,代碼如下:

          package tipsAndTricks;

          import java.sql.Date;

          public class Product {
          ? ?
          private String name;
          ? ?
          private double price;
          ? ?
          private Date dateOfProduction;
          ? ?
          ? ?
          public Date getDateOfProduction() {
          ? ? ? ?
          return dateOfProduction;
          ? ?}

          ? ?
          ? ?
          public void setDateOfProduction(Date dateOfProduction) {
          ? ? ? ?
          this .dateOfProduction = dateOfProduction;
          ? ?}

          ? ?
          ? ?
          public String getName() {
          ? ? ? ?
          return name;
          ? ?}

          ? ?
          ? ?
          public void setName(String name) {
          ? ? ? ?
          this .name = name;
          ? ?}

          ? ?
          ? ?
          public double getPrice() {
          ? ? ? ?
          return price;
          ? ?}

          ? ?
          ? ?
          public void setPrice( double price) {
          ? ? ? ?
          this .price = price;
          ? ?}
          ? ?
          }

          與《轉》例中的Product不同的是,本例子中的dateOfProduction屬性使用了java.sql.Date,而不是java.util.Date。這是因為Struts 1.x不支持請求參數到java.util.Date的轉換,歸根到底是由于org.apache.commons.beanutils.ConvertUtilsBean.convert()不支持關于java.util.Date的轉換。另外,值得注意的是common-beanutils是通過java.sql.Date.valueOf()方法工作的,所以在頁面輸入的字符串的格式必須為“yyyy-MM-dd”。

          實現上述功能大概有三種方法,下面我會分別對這三種方法進行詳細的講述。

          方法一、動態表單(Dynamic Actoin Form)+ 數組

          首先,讓我們來看一下Struts的配置文件WEB-INF/struts-config.xml,內容如下:

          <? 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 >
          ? ?
          < data-sources />
          ? ?
          < form-beans >
          ? ? ? ?
          < form-bean name ="dynaProductsForm"
          ? ? ? ? ? ? type
          ="org.apache.struts.action.DynaActionForm" >
          ? ? ? ? ? ?
          < form-property name ="products"
          ? ? ? ? ? ? ? ? type
          ="tipsAndTricks.Product[]" size ="3" />
          ? ? ? ?
          </ form-bean >

          ? ?
          </ form-beans >

          ? ?
          < global-exceptions />
          ? ?
          < global-forwards />
          ? ?
          < action-mappings >
          ? ? ? ?
          < action attribute ="dynaProductsForm" input ="/addProducts.jsp"
          ? ? ? ? ? ? name
          ="dynaProductsForm" path ="/batchWrappingWithArray"
          ? ? ? ? ? ? scope
          ="request" type ="tipsAndTricks.BatchWrappingWithArrayAction"
          ? ? ? ? ? ? validate
          ="false" >
          ? ? ? ? ? ?
          < forward name ="success" path ="/viewProducts.jsp" />
          ? ? ? ?
          </ action >

          ? ?
          </ action-mappings >

          ? ?
          < message-resources parameter ="tipsAndTricks.ApplicationResources" />
          </ struts-config >

          我想這些配置應該用不著怎么解釋了,有Struts 1.x驗證的朋友對此都不會陌生。因此,接下來創建/addProducts.jsp文件,代碼如下:

          <% @ page language = " java " pageEncoding = " utf-8 " %>

          <% @ taglib uri = " http://struts.apache.org/tags-html " prefix = " html " %>
          <% @ taglib uri = " http://java.sun.com/jsp/jstl/core " prefix = " c " %>

          <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
          < html >
          < head >
          < title > Add Products </ title >
          </ head >
          < body >
          < html:form action ="/batchWrappingWithArray" method ="post" >
          ? ?
          < table border ="0" >
          ? ? ? ?
          < tr style ="background-color:powderblue; font-weight:bold;" >
          ? ? ? ? ? ?
          < td > Product Name </ td >
          ? ? ? ? ? ?
          < td > Price </ td >
          ? ? ? ? ? ?
          < td > Date of production </ td >
          ? ? ? ?
          </ tr >
          ? ? ? ?
          < c:forEach var ="products" items ="${dynaProductsForm.map.products}" >
          ? ? ? ? ? ?
          < tr >
          ? ? ? ? ? ? ? ?
          < td >< html:text indexed ="true" name ="products" property ="name" /></ td >
          ? ? ? ? ? ? ? ?
          < td >< html:text indexed ="true" name ="products" property ="price" /></ td >
          ? ? ? ? ? ? ? ?
          < td >< html:text indexed ="true" name ="products" property ="dateOfProduction" /></ td >
          ? ? ? ? ? ?
          </ tr >
          ? ? ? ?
          </ c:forEach >
          ? ? ? ?
          < tr >
          ? ? ? ? ? ?
          < td colspan ="3" >< html:submit /></ td >
          ? ? ? ?
          </ tr >
          ? ?
          </ table >
          </ html:form >
          </ body >
          </ html >

          例中,我使用了JSTL 1.1,如果大家還沒有嘗試過使用JSP 2.0的JSTL和EL,建議大家去看看相關文章。上面的<c:forEach />的作用是到dynaProductsForm的map屬性中取出products數組,并對其進行遍歷,再依靠<html:text />標志將products的元素的屬性以輸入框的形式輸出。<html:text />標志的屬性indexed="true"則表示在輸出HTML時,將<input>的命名為類似products[0].name的名字。

          然后,再創建/viewProducts.jsp頁面,內容如下:

          <% @ page language = " java " pageEncoding = " utf-8 " %>

          <% @ taglib uri = " http://java.sun.com/jsp/jstl/core " prefix = " c " %>

          <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
          < html >
          < head >
          < title > View Products </ title >
          </ head >
          < body >
          < table border ="0" >
          ? ?
          < tr style ="background-color:powderblue; font-weight:bold;" >
          ? ? ? ?
          < td > Product Name </ td >
          ? ? ? ?
          < td > Price </ td >
          ? ? ? ?
          < td > Date of production </ td >
          ? ?
          </ tr >
          ? ?
          < c:forEach var ="product" items ="${products}" >
          ? ? ? ?
          < tr >
          ? ? ? ? ? ?
          < td > ${product.name} </ td >
          ? ? ? ? ? ?
          < td > ${product.price} </ td >
          ? ? ? ? ? ?
          < td > ${product.dateOfProduction} </ td >
          ? ? ? ?
          </ tr >
          ? ?
          </ c:forEach >
          </ table >
          </ body >
          </ html >

          我想這份也不多作說明。不過大家可以通過上述代碼看出使用JSTL + EL的確比Struts 1.x的logic + bean要方便和簡潔。不僅如此,EL還支持一定的運算符和函數操作。

          最后是建立Action文件tipsAndTricks.BatchWrappingWithArrayAction,代碼如下:

          package tipsAndTricks;

          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          import org.apache.struts.action.Action;
          import org.apache.struts.action.ActionForm;
          import org.apache.struts.action.ActionForward;
          import org.apache.struts.action.ActionMapping;
          import org.apache.struts.action.DynaActionForm;

          public class BatchWrappingWithArrayAction extends Action {
          ? ?
          public ActionForward execute(ActionMapping mapping, ActionForm form,
          ? ? ? ? ? ? ? ? ?HttpServletRequest request, HttpServletResponse response)
          {
          ? ? ? ? ? ?DynaActionForm dynaProductsForm
          = (DynaActionForm) form;
          ? ? ? ? ? ?request.setAttribute(
          " products " , dynaProductsForm.get( " products " ));
          ? ? ? ?
          return mapping.findForward( " success " );
          ? ?}

          }

          此Action將動態表單傳過來的products數組放到request中,轉到/viewProducts.jsp。發布運行應用程序,在瀏覽器的地址欄中輸入:http://localhost:8080/Struts1_Batch/addProducts.jsp。效果請參考如圖1、圖2。

          在/addProducts.jsp的“Date of production”必須以(yyyy-MM-dd)的形式正確填寫,且不能為空。

          方法二、表單(Actoin Form)+ 列表(List)

          方法一雖然簡單,但是有一個明顯的缺點——數組的長度已經固定,故我們不能在運行時通過程序設置對象數量。下面將要介紹的方法可以很好地解決這個問題。

          首先,我們要創建類tipsAndTricks.AutoInitArrayList,代碼如下:

          package tipsAndTricks;

          import java.util.ArrayList;

          public class AutoInitArrayList < T > extends ArrayList < T > {
          ? ?
          private static final long serialVersionUID = 1L ;?
          ? ?
          ? ?
          private Class < T > t = null ;
          ? ?
          ? ?
          public AutoInitArrayList(Class < T > t) {
          ? ? ? ?
          this .t = t;
          ? ?}

          ? ?
          ? ?@Override
          ? ?
          public T get( int index) {
          ? ? ? ?
          try {
          ? ? ? ? ? ?
          while (index >= size()) {
          ? ? ? ? ? ? ? ?add(t.newInstance());
          ? ? ? ? ? ?}

          ? ? ? ?}
          catch (Exception e) {
          ? ? ? ? ? ?e.printStackTrace();
          ? ? ? ?}

          ? ? ? ?
          return super .get(index);
          ? ?}
          ? ?
          }

          AutoInitArrayList繼承ArrayList并重載get()方法,作用就是在Struts 1.x框架調用這個方法時,如果index超出列表大小,則會實例化新項放到列表中,避免出現(IndexOutOfBoundsException)異常。

          接著,讓我們看Struts的配置,內容如下:

          <? 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 >
          ? ?
          < data-sources />
          ? ?
          < form-beans >
          ? ? ? ?
          < form-bean name ="dynaProductsForm"
          ? ? ? ? ? ? type
          ="org.apache.struts.action.DynaActionForm" >
          ? ? ? ? ? ?
          < form-property name ="products"
          ? ? ? ? ? ? ? ? type
          ="tipsAndTricks.Product[]" size ="3" />
          ? ? ? ?
          </ form-bean >
          ? ? ? ?
          < form-bean name ="normalProductsForm"
          ? ? ? ? ? ? type
          ="tipsAndTricks.NormalProductsForm" />

          ? ?
          </ form-beans >

          ? ?
          < global-exceptions />
          ? ?
          < global-forwards />
          ? ?
          < action-mappings >
          ? ? ? ?
          < action attribute ="dynaProductsForm" input ="/addProducts.jsp"
          ? ? ? ? ? ? name
          ="dynaProductsForm" path ="/batchWrappingWithArray"
          ? ? ? ? ? ? scope
          ="request" type ="tipsAndTricks.BatchWrappingWithArrayAction"
          ? ? ? ? ? ? validate
          ="false" >
          ? ? ? ? ? ?
          < forward name ="success" path ="/viewProducts.jsp" />
          ? ? ? ?
          </ action >
          ? ? ? ?
          < action attribute ="normalProductsForm" input ="/addProducts.jsp"
          ? ? ? ? ? ? name
          ="normalProductsForm" path ="/batchWrappingNormal" scope ="request"
          ? ? ? ? ? ? type
          ="tipsAndTricks.BatchWrappingNormalAction" validate ="false" >
          ? ? ? ? ? ?
          < forward name ="success" path ="/viewProducts.jsp" />
          ? ? ? ?
          </ action >

          ? ?
          </ action-mappings >

          ? ?
          < message-resources parameter ="tipsAndTricks.ApplicationResources" />
          </ struts-config >

          然后,創建表單類tipsAndTricks.NormalProductsForm,代碼如下:

          package tipsAndTricks;

          import java.util.List;

          import org.apache.struts.action.ActionForm;

          public class NormalProductsForm extends ActionForm {
          ? ?
          private List products = new AutoInitArrayList < Product > (Product. class );

          ? ?
          public List getProducts() {
          ? ? ? ?
          return products;
          ? ?}


          ? ?
          public void setProducts(List products) {
          ? ? ? ?
          this .products = products;
          ? ?}
          ? ?
          }

          接下來是Action類tipsAndTricks.BatchWrappingNormalAction,代碼如下:

          /*
          * Generated by MyEclipse Struts
          * Template path: templates/java/JavaClass.vtl
          */

          package tipsAndTricks;

          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          import org.apache.struts.action.Action;
          import org.apache.struts.action.ActionForm;
          import org.apache.struts.action.ActionForward;
          import org.apache.struts.action.ActionMapping;

          public class BatchWrappingNormalAction extends Action {
          ? ?
          public ActionForward execute(ActionMapping mapping, ActionForm form,
          ? ? ? ? ? ?HttpServletRequest request, HttpServletResponse response)
          {
          ? ? ? ?NormalProductsForm normalProductsForm
          = (NormalProductsForm) form;
          ? ? ? ?request.setAttribute(
          " products " , normalProductsForm.getProducts());
          ? ? ? ?
          return mapping.findForward( " success " );
          ? ?}

          }

          基本上與方法一的Action一樣。下面,再看看新的輸入文件/addProducts2.jsp,內容如下:

          <% @ page language = " java " pageEncoding = " utf-8 " %>

          <% @ taglib uri = " http://struts.apache.org/tags-html " prefix = " html " %>
          <% @ taglib uri = " http://java.sun.com/jsp/jstl/core " prefix = " c " %>

          <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
          < html >
          < head >
          < title > Add Products </ title >
          </ head >
          < body >
          < html:form action ="/batchWrappingNormal" method ="post" >
          ? ?
          < table border ="0" >
          ? ? ? ?
          < tr style ="background-color:powderblue; font-weight:bold;" >
          ? ? ? ? ? ?
          < td > Product Name </ td >
          ? ? ? ? ? ?
          < td > Price </ td >
          ? ? ? ? ? ?
          < td > Date of production </ td >
          ? ? ? ?
          </ tr >
          ? ? ? ?
          < c:forEach begin ="0" end ="2" var ="i" >
          ? ? ? ? ? ?
          < tr >
          ? ? ? ? ? ? ? ?
          < td >< input name ="products[${i}].name" /></ td > ? ? ? ? ? ? ? ?
          ? ? ? ? ? ? ? ?
          < td >< input name ="products[${i}].price" /></ td >
          ? ? ? ? ? ? ? ?
          < td >< input name ="products[${i}].dateOfProduction" /></ td >
          ? ? ? ? ? ?
          </ tr >
          ? ? ? ?
          </ c:forEach >
          ? ? ? ?
          < tr >
          ? ? ? ? ? ?
          < td colspan ="3" >< html:submit /></ td >
          ? ? ? ?
          </ tr >
          ? ?
          </ table >
          </ html:form >
          </ body >
          </ html >

          /addProducts2.jsp主要作用組裝<input>的元素名稱,Struts 1.x對名稱格式類似“xxx[9].xx”的請求,會進行封裝。發布運行應用程序,在瀏覽器的地址欄中輸入:http://localhost:8080/Struts1_Batch/addProducts2.jsp。效果請參考如圖1、圖2。

          總結

          兩種方法各有優缺點,選擇原則是如果不需要動態設置元素個數,則使用方法一,否則請使用方法二。

          posted on 2006-12-08 19:51 Max 閱讀(7820) 評論(40)  編輯  收藏 所屬分類: 方法與技巧(Tips & tricks)

          評論:
          # re: Struts 1.x中批量封裝對象 2006-12-08 22:12 | 龍卷風
          不錯,以前我都是直接在action端用request接受html過來的數組,然后循環操作

          你這樣做感覺更上路子一點  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2006-12-09 10:28 | 張先生
          太精彩了!我還是老問題,一直沒解決!在weblogic下部署struts2,頁面跳轉找不著目標而出錯!您有weblogic下的例子嗎?謝謝!  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2006-12-09 19:03 | kuan
          見解一下兩種方法中的提交時form是怎么包裝(形成)的好嗎  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2006-12-09 19:08 | kuan
          這段好像有問題巴?
          public class AutoInitArrayList < T > extends ArrayList < T > {
          private static final long serialVersionUID = 1L ;

          private Class < T > t = null ;

          public AutoInitArrayList(Class < T > t) {
          this .t = t;
          }

          @Override
          public T get( int index) {
          try {
          while (index >= size()) {
          add(t.newInstance());
          }
          } catch (Exception e) {
          e.printStackTrace();
          }
          return super .get(index);
          }
          }   回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2006-12-10 22:04 | Max
          @kuan
          在我的環境中是沒有問題的。  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2006-12-13 09:08 | 憂郁的龍卷風
          批量對象個數不確定的時候就是用方法2做的 我在項目中已經用過這種方法了.
          但是就是驗證的時候有些問題..  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2006-12-27 10:33 | allen[匿名]
          你好,我做了一個actionForm中的list設置到表單,提交后取不到list中的值,郁悶死了,能夠把第二種方法的源碼全部發給我嗎,xian_Lun@sina.com
          謝謝  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2006-12-28 10:12 | Max
          @allen[匿名]
          源碼已經發送到你的郵箱。  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2006-12-28 18:35 | kuan
          也發份給我看看
          feinali@gmail.com  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2006-12-30 14:32 | Max
          @kuan
          Gmail好難上啊,還好源碼已經發送到你的郵箱。  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2007-01-30 14:46 | Peter
          我也用過類似方法。后來發現不用自己實現,在common-collection包中的LazyList就是做這個的。  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2007-03-08 07:19 | 對象
          能夠把第二種方法的源碼全部發給我嗎
          我的郵箱是348539181@qq.com  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2007-03-16 15:22 | kyuy
          如果name屬性值是從數據庫中讀到,將后兩項添好后,在提交又怎么樣取呢!  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2007-03-16 15:23 | kyuy
          如果愿意請發郵箱到zhjyiqing@163.com  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2007-03-23 10:47 | suixincha
          現在在研究批量封裝,希望能參考你的代碼,suixincha3388@163.com,謝謝!  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2007-04-27 16:26 | lvq
          批量處理數據不是集合就是數組
          很正常  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2007-05-22 15:51 | linyelong
          調試失敗,麻煩發送源代碼一份:yelonglin@yahoo.com.cn. thanks  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2007-05-25 09:04 | lin
          郁悶了一天,第二種方法需要這樣寫,否則解析不了:addProducts2.jsp
          <c:forEach begin ="0" end ="1" var ="i" >
          <tr>
          <td><input name =products[<c:out value="${i}"/>].name /></td>
          <td><input name ="products[<c:out value="${i}"/>].price" /></td>
          <td><input name ="products[<c:out value="${i}"/>].dateOfProduction" /></td>
          </tr>
          </c:forEach >
            回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2007-05-25 09:46 | Max
          @linyelong
          源碼以發到你的郵箱。
          @lin
          這應該是JSP 1.2與JSP 2.0的區別。  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2007-06-04 12:39 | 阿泰
          能夠把第二種方法的源碼全部發給我嗎
          我的郵箱是348539181@qq.com   回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2007-06-04 23:36 | Max
          @阿泰
          已發送  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2007-06-07 09:27 | 求助的人
          能把這兩個例子的源碼發給我嗎?感謝-ing
          yinj_good@163.com  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象[未登錄] 2007-09-19 14:15 | 冷血
          請問這種方式,如果對輸入進行后臺驗證呢?
          如果不能驗證這種方式有何意義?  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2007-12-12 15:38 | cq
          第二種方法用到了JDK1.5的泛型,有1.4的解決方案嗎?
          有的話可以發給我嗎?
          cheng888qi@163.com  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2007-12-19 14:23 | 你好.
          可以給個聯系方式嗎?QQ或者是MSN  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2008-04-22 09:25 | sanit
          批量封裝對象的確。但lz有沒有。在提交表單的時候,數據校驗的時候是不是也增加了相應的難度呢?
          可能lz當時只是為了說明批量封裝對象的功能強大之處,而并沒有考慮到數據校驗等等真實存在的一些可能發生的問題呢。
          還希望lz能夠更好的解決方案。這樣就可以讓初學者避免走更多的彎路了。  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2008-05-03 06:45 | zw
          能給我也發一份嗎?關于struts2的一些東東,全一點的例子,plugin開發的例子?
          zw7534313@163.com  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象[未登錄] 2008-05-27 16:34 | haha
          wusuo_007@163.com謝謝偶要!  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2008-07-27 23:11 | silence1214
          你們都這樣用啊,好麻煩
          我一直用LazyValidatorForm 不管個數多少都可以啊
          也不用寫這么麻煩 也不用寫actionForm  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2008-08-09 09:51 | zrw
          請問為什么我得不到用戶輸入的數據啊~
          我的郵箱zhaorongwei520@163.com  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2008-09-16 22:15 | 馮強
          大俠
          為什么我用這種方法都取不到值呢
          normalProductsForm.getProducts()總是為空?
          能否把答案發給我fq_1219@163.com
          拜托了  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2009-02-26 18:25 | e_ville
          好,不錯,我使用樓主的方法實現了。
          關鍵是表單域的命名要像這樣子(迭代的是另一個Decorator列表,以在列表中顯示數據):

          <input type="text" name="listData[<%= index %>].listOrder" value="<bean:write name='objDecorator' property='decoratorObject.listOrder'/>" >

          這樣子在提交表單的時候就會將數據封裝到Form中listData列表中的對應元素中去了。listData類型為樓主上面修改過的 AutoInitArrayList  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2009-06-08 00:31 | 〃差不多先生
          大俠,能把2種方法的源碼發過來嗎?謝啦。!
          caofengwei55@vip.sina.com  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2009-07-16 21:13 | ..
          呵呵,在您這里真的能學到需要的東東.  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2009-10-14 18:17 | john.jiao
          第二個方法只能插入小于等于六條數據!!  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2010-01-22 09:22 |
          我的封裝后為0,不走get(index)方法呢?咋回事啊  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2010-01-22 09:55 |
          誰有以上兩種的源碼,發給我一份好不?yan3194283@163.com謝謝!  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2010-08-31 08:54 | leson
          有第二種代碼的,共享一下啊。謝謝
          i.leson@163.com  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2012-08-15 14:50 | li yong
          我的封裝意思也是為0 誰有源碼發給下lys221221@163.com  回復  更多評論
            
          # re: Struts 1.x中批量封裝對象 2013-08-08 17:21 | frice
          誰有 第二種方法的原碼,共享一下,萬分感謝  回復  更多評論
            
          主站蜘蛛池模板: 尖扎县| 昌吉市| 汉沽区| 玛纳斯县| 六枝特区| 大理市| 陈巴尔虎旗| 鄂州市| 建昌县| 上栗县| 通海县| 太白县| 娄烦县| 晋州市| 廉江市| 会泽县| 台江县| 太白县| 岐山县| 马关县| 云阳县| 钟山县| 诸城市| 嘉定区| 林口县| 黄骅市| 大姚县| 奉节县| 响水县| 陇西县| 郯城县| 土默特左旗| 丽水市| 托里县| 鹤山市| 吐鲁番市| 滁州市| 桦甸市| 淮滨县| 宁强县| 西城区|