struts2 页面提交对象数组到Action
struts2 页面提交对象数组到Action
http://blog.163.com/ppy2790@126/blog/static/103242241201210751435644/
2012-11-07 17:14:35| 分类: 默认分类 | 标签:struts2
webwork表单提交中有一个很有用的技巧,在提交成组的类似person[0].name,person[1].name的表单中,可以利用conversion使xwork自动装配对象属性到action中: 
form 代码: 
Html代码 
<form action="savePerson.action">   
<input type="text" name="persons[0].name" />   
<input type="text" name="persons[0].id" />   
<input type="text" name="persons[1].name" />   
<input type="text" name="persons[1].id" />   
</form>   
<form action="savePerson.action"> 
<input type="text" name="persons[0].name" /> 
<input type="text" name="persons[0].id" /> 
<input type="text" name="persons[1].name" /> 
<input type="text" name="persons[1].id" /> 
</form> 
person类: 
Java代码 
public Class Person{    
public String name;    
public Long id;    
getXXX...    
setXXX...    
}   
public Class Person{ 
public String name; 
public Long id; 
getXXX... 
setXXX... 
} 
然后在action类同层次创建conversion文件,ClassName-conversion.properties,这里用SavePersonAction-conversion.properties: 
Java代码 
Element_persons=Person    
CreateIfNull_persons=true   
Element_persons=Person 
CreateIfNull_persons=true 
这里面配置文件的含义就是页面中persons名字样式的数组表单提交会被xwork转换成一个个对象放入list中,如果list是空的话xwork会自己创建一个. 
action的代码如下: 
Java代码 
public Class SavePersonAction extends ActionSupport{    
   List persons=new ArrayList();    
}   
public Class SavePersonAction extends ActionSupport{ 
  List persons=new ArrayList(); 
} 
这样,form中提交的数组形式的属性,会由xwork转换成person对象并放入list中,供action使用. 
但这样的验证表单的数据就会与传统xwork的验证不同.传统xml的validation类似如下样子: 
Xml代码 
<validators>   
  <field name="name">   
      <field-validator type="required">   
          <message>You must enter a value for bar.</message>   
      </field-validator>   
  </field>   
<validators>   
<validators> 
  <field name="name"> 
      <field-validator type="required"> 
          <message>You must enter a value for bar.</message> 
      </field-validator> 
  </field> 
<validators> 
这里的field name必须精确匹配表单中提交的名字,由于我们表单中的name是name 
形式的,并不能确定提交哪个person[?].name , 就要用到xwork的一个测试的validation,叫collection,配置方法如下,在SavePersonAction-validation.xml中加入: 
Xml代码 
<validators>   
   <field name="persons">   
       <field-validator type="collection">   
        <param name="property">persons.name</param>   
        <param name="validatorRef">required</param>   
         <param name="validatorParams['defaultMessage']">Must be String</param>   
         <message> ... </message>   
       </field-validator>   
   </field>   
</validators>   
<validators>   

                
            
        
浙公网安备 33010602011771号