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>  

web

相關文章
相關標籤/搜索