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