struts里面如何自动提交多行表单数据

actionform里面存放list属性(list中存放每一条都是有效记录对象)可以比较容易的完成多行表单

数据的显示工作,但是反过来页面上的对应数据却无法提交给List中的记录对象。有人做过类似的工

作么?如果解决? 
--------------------------------------------------------------- 
 
通过数组可以做的, 
public  class  XXXForm  ...{ 
   private  String  names[]; 

页面: 
<html:select  property="names"  multiple="true"> 
... 
</html:select> 
--------------------------------------------------------------- 
 
struts最后还是要通过Form里的域比如<input  type="text"之类进行提交。 
struts能做的只是自动将这些数据收集到Form里对应的变量中。 
能利用的一个对应是Checkbox,Struts做了一个数组可以收集。 
我的建议:将List每一行都加一个checkbox,  其值为键值。 
这样就可以在Form中得到一个键值的数组,一般够用了。 
--------------------------------------------------------------- 
 
checkbox是可以实现的,常用的就是放一个ID在checkbox里。不过如果每一行所有数据都要提交回去

的话。 
我想可以用多个hidden对应每个相同的属性,名字一样就行了,提交回去后,就有了多个相同属性的

数组。 
不过我没有用过,只是想了想,不知对不? 
学习中~~~~~~~~~~~~~~~~ 
--------------------------------------------------------------- 
 
不可以,这个问题我遇到过,我已经解决了,呵呵 
需要这个样子的:当你提交上来的数据需要在form里面定义需要提交上来的数组,一般都是用String 

a[]这种形势,这样就可以提交,然后自己写一个方法,把提交上来的数据重新初始化为自己想要得类

。嘿嘿,我那个项目就是这样解决的,目前正常运行没有问题 
例如: 
class  A  { 
     private  String  name; 
       private  String  address; 

class  form{ 
       A[]      test  =  null; 
       String[]  name  =  null;//A类里面需要提交上来的数据 

然后再Action的setFormToBean()方法里面根据上传上来的name重新创建A类的实例数组 
 
--------------------------------------------------------------- 
 
应该是不可以的,struts如何知道你需要获得的对象类型? 
webwork是通过以下方式解决这个问题的: 
// 
private  List  listData  =  new  XWorkList(XXXData.class);   
// 
也许新版本的struts中会有? 
 
--------------------------------------------------------------- 
 
没试过,我们都用数组。 
--------------------------------------------------------------- 
 
这样你可以通过两上formbean来处理,一个是专门用来处理你列表中的信息的A,一个专来用来处理其

它页面信息B(主从表),在B中用一个属性private  ArrayList  aList=new  AutoArrayList

(A.class); 
AutoArrayList是继承了ArrayList的类,其中构造函数的一个参数为AutoArrayList(Class  iTem),这

样是利用反射了吧!!在其中有一个方法 
 
     public  Object  get(int  index)  { 
 
               try  { 
 
                       while  (index  >=  size())  { 
 
                               add(itemClass.newInstance()); 
 
                       } 
 
               }  catch  (Exception  e)  { 
 
                       e.printStackTrace(); 
 
               } 
 
               return  super.get(index); 
 
       } 
是用来处理类组的吧!! 
页面上通过 
<logic:iterate  id="aList"    name="B"  property="aList"  indexId="index"> 
<html:text  name="aList"  property="A中的属性"  indexed="true"/> 
</logic:iterage> 
这样aList就会与B表中的aList对应了,其中<html:text/>中的名都成了aList[].A表中的属性了,于

是也变成了数据处理了!事实上有点象处理Hibernate中的many-to-one那种吧! 
 
以上是我的一些小认识大家多讨论啦!! 
--------------------------------------------------------------- 
 
可以结合javascript来做,把grid的信息组成一个xml或者string,然后以hidden字段的形式提交到

server端,再对xml或者string进行解析。 
--------------------------------------------------------------- 
 
学习 
--------------------------------------------------------------- 
 
likeBean(喜欢吃咖啡豆)  说得是个好办法,现在项目中就这么用。 
--------------------------------------------------------------- 
 
偶系新人 
不知道我的方法好不好用。我以前做过这样的问题。你有没有考虑到用hidden来做做看呢 
--------------------------------------------------------------- 
 
关注 
--------------------------------------------------------------- 
 
碰巧刚做完一个项目就是list提交的,日月的方法是正确的,那个构造函数不是必需的,改写的

arrayList如下 
 
public  class  Sk0007S001Bean  extends  ArrayList  { 
            
           private  static  FcLoggerInterface  mylogger  = 
                       FcLoggerFactory.getLogger("Sk0007S001Bean"); 
                                    
           private  Sk0007S000Bean  sk0007S000Bean  =  null; 
 
           public  Sk0007S001Bean(Sk0007S000Bean  sk0007S000Bean)  { 
                       String  METHOD_NAME  =  "Sk0007S001Bean"; 
                        
                       mylogger.methodTrace(METHOD_NAME,  FcMsg.START); 
                       this.sk0007S000Bean  =  sk0007S000Bean; 
                       mylogger.methodTrace(METHOD_NAME,  FcMsg.END); 
           } 
            
           public  Object  get(int  index)  { 
                       String  METHOD_NAME  =  "get"; 
                        
                       mylogger.methodTrace(METHOD_NAME,  FcMsg.START); 
                       while  (index  >=  size())  { 
                                   /*初期化*/ 
                                   add(new  Sk0007S000Bean()); 
                       } 
                       mylogger.methodTrace(METHOD_NAME,  FcMsg.END); 
                       return  super.get(index); 
           } 

 
 
--------------------------------------------------------------- 
 
DynaActionForm只支持固定长度的collection,所以我是这么做的: 
================================================== 
struts-config.xml中的formBean 
 
<form-bean  name="cityInfoActionForm"  type="org.apache.struts.action.DynaActionForm"> 
<form-property  name="set_id"  type="java.lang.String[]"  /> 
<form-property  name="setName"  type="java.lang.String[]"  /> 
<form-property  name="setType"  type="java.lang.String[]"  /> 
<form-property  name="address"  type="java.lang.String[]"  /> 
<form-property  name="setTel"  type="java.lang.String[]"/> 
<form-property  name="i1c_id"  type="java.lang.String"/> 
<form-property  name="type"  type="java.lang.String"/> 
</form-bean> 
============================================= 
action 
 
DynaActionForm  cityInfo_af=(DynaActionForm)actionForm; 
String[]  setName=cityInfo_af.getStrings("setName"); 
String[]  setType=cityInfo_af.getStrings("setType"); 
String[]  address=cityInfo_af.getStrings("address"); 
String[]  setTel=cityInfo_af.getStrings("setTel"); 
for(int  i=0;i<setName.length;i++) 

CityInfo  cityInfo=new  CityInfo(); 
cityInfo.setItem1Class(i1c); 
cityInfo.setType(type); 
cityInfo.setLanguage(language); 
cityInfo.setSetName(setName[i]); 
cityInfo.setSetType(setType[i]); 
cityInfo.setAddress(address[i]); 
cityInfo.setSetTel(setTel[i]); 
cityInfoDAOImpl.insert(cityInfo); 

===================================================== 
JSP页面 
 
<%@  page  contentType="text/html;  charset=utf-8"  errorPage="/error.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"  %> 
<logic:notPresent  name="adminBean"  scope="session"> 
   <logic:forward  name="error"/> 
</logic:notPresent> 
<bean:parameter  name="type"  id="type"/> 
<bean:parameter  name="i1c_id"  id="i1c_id"/> 
<html> 
   <body> 
       <TABLE  width="100%"  cellPadding=2  cellSpacing=1  bgcolor="#CACADB"  id=t136> 
           <tr  align="center"  bgcolor="#E4E7EF"> 
               <td  height="20"> 
                   <bean:message  key="city.set.form.setName"/> 
               </td> 
               <td> 
                   <logic:equal  name="type"  value="food"> 
                       <bean:message  key="city.set.form.food.setType"/> 
                   </logic:equal> 
                   <logic:notEqual  name="type"  value="food"> 
                       <bean:message  key="city.set.form.yule.setType"/> 
                   </logic:notEqual> 
               </td> 
               <td> 
               <logic:equal  name="type"  value="traffic"> 
                       <bean:message  key="hotel.form.intro"/> 
                   </logic:equal> 
                                   <logic:notEqual  name="type"  value="traffic"> 
                   <bean:message  key="golf.form.address"/> 
                                   </logic:notEqual> 
               </td> 
               <td> 
                   <bean:message  key="hotel.form.tel"/> 
               </td> 
               <td> 
                   <a  href="javascript:void(0)"  οnclick=addNew()> 
                       添加项目 
                   </a> 
               </td> 
           </tr> 
           <form  action="/admin/cityInfoAdd.do"  method="post"> 
           <input  type="hidden"  name="type"  value="<bean:write  name="type"/>"> 
           <input  type="hidden"  name="i1c_id"  value="<bean:write  name="i1c_id"/>"> 
               <tr  align="center"  bgcolor="#ffffff"> 
                   <td> 
                       <input  type="text"  name="setName"  size="10"> 
                   </td> 
                   <td> 
                       <input  type="text"  name="setType"  size="10"> 
                   </td> 
 
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值