2008-03-25
webwork数组形式提交表单及validation研究
关键字: xwork collection
webwork表单提交中有一个很有用的技巧,在提交成组的类似person[0].name,person[1].name的表单中,可以利用conversion使xwork自动装配对象属性到action中:
form 代码:
person类:
然后在action类同层次创建conversion文件,ClassName-conversion.properties,这里用SavePersonAction-conversion.properties:
这里面配置文件的含义就是页面中persons名字样式的数组表单提交会被xwork转换成一个个对象放入list中,如果list是空的话xwork会自己创建一个.
action的代码如下:
这样,form中提交的数组形式的属性,会由xwork转换成person对象并放入list中,供action使用.
但这样的验证表单的数据就会与传统xwork的验证不同.传统xml的validation类似如下样子:
这里的field name必须精确匹配表单中提交的名字,由于我们表单中的name是name形式的,并不能确定提交哪个person[?].name , 就要用到xwork的一个测试的validation,叫collection,配置方法如下,在SavePersonAction-validation.xml中加入:
我想实验用collection去使用regex验证,没有成功,可能还有问题,最后还是将表单提交到action层进行正则验证.
conversion会有一个问题,如果person中有一个id声明为long类型,但页面提交的时候这个属性如果包括了字母和数字,就会产生一个conversion error,由于xwork的xml验证是在conversion转换成对象之后进行,无法在之前拦截到, 如果页面操作比较复杂,需要button提交数据到action进行各种操作,会在提交前产生conversion error,不能进入action层进行操作,在开发中需要注意.
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类:
public Class Person{
public String name;
public Long id;
getXXX...
setXXX...
}
然后在action类同层次创建conversion文件,ClassName-conversion.properties,这里用SavePersonAction-conversion.properties:
Element_persons=Person CreateIfNull_persons=true
这里面配置文件的含义就是页面中persons名字样式的数组表单提交会被xwork转换成一个个对象放入list中,如果list是空的话xwork会自己创建一个.
action的代码如下:
public Class SavePersonAction extends ActionSupport{
List persons=new ArrayList();
}
这样,form中提交的数组形式的属性,会由xwork转换成person对象并放入list中,供action使用.
但这样的验证表单的数据就会与传统xwork的验证不同.传统xml的validation类似如下样子:
<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
<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>
我想实验用collection去使用regex验证,没有成功,可能还有问题,最后还是将表单提交到action层进行正则验证.
conversion会有一个问题,如果person中有一个id声明为long类型,但页面提交的时候这个属性如果包括了字母和数字,就会产生一个conversion error,由于xwork的xml验证是在conversion转换成对象之后进行,无法在之前拦截到, 如果页面操作比较复杂,需要button提交数据到action进行各种操作,会在提交前产生conversion error,不能进入action层进行操作,在开发中需要注意.
- 20:17
- 浏览 (168)
- 评论 (3)
- 分类: 计算机与 Internet
- 进入论坛
- 相关推荐
评论
xzcgeorge
2008-06-02
可曾解决过 webwork/struts2中如何给一个对象的集合对象配置参数 的问题?
http://www.javaeye.com/problems/170
http://www.javaeye.com/problems/170
darkjune
2008-03-28
我用regex配置的正则不能拦截表单提交,有时候还会报错,不知道为什么
kjj
2008-03-27
collection 验证,没问题,我成功了
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 18467 次

- 详细资料
搜索本博客
我的相册
siebel
共 1 张
共 1 张
最近加入圈子
最新评论
-
eclipse自带内存监视及回 ...
呵呵,不用~
-- by darkjune -
eclipse自带内存监视及回 ...
原来是自带的! 谢谢了!!!
-- by grape927 -
webwork数组形式提交表单 ...
可曾解决过 webwork/struts2中如何给一个对象的集合对象配置参数 的 ...
-- by xzcgeorge -
如何对List中的对象进行排 ...
恩,是这样的,我为了方便直接实现comparable接口
-- by darkjune -
如何对List中的对象进行排 ...
不是这样吧,list本身就是无序的。 应该用Comparator,Collect ...
-- by spiritfrog






评论排行榜