`
darkjune
  • 浏览: 301768 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

webwork数组形式提交表单及validation研究

阅读更多
webwork表单提交中有一个很有用的技巧,在提交成组的类似person[0].name,person[1].name的表单中,可以利用conversion使xwork自动装配对象属性到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
  • 形式的,并不能确定提交哪个person[?].name , 就要用到xwork的一个测试的validation,叫collection,配置方法如下,在SavePersonAction-validation.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>
    


    我想实验用collection去使用regex验证,没有成功,可能还有问题,最后还是将表单提交到action层进行正则验证.

    conversion会有一个问题,如果person中有一个id声明为long类型,但页面提交的时候这个属性如果包括了字母和数字,就会产生一个conversion error,由于xwork的xml验证是在conversion转换成对象之后进行,无法在之前拦截到, 如果页面操作比较复杂,需要button提交数据到action进行各种操作,会在提交前产生conversion error,不能进入action层进行操作,在开发中需要注意.
    分享到:
    评论
    7 楼 darkjune 2008-11-11  
    gyang2 写道

    若list中又有list,第二个list中才方person对象,如何从页面传值到action?如何些conversion.properties文件?

    还没见过这种页面布局的, 一般提交一个list就够了, 什么样的页面需要提交这个样子的数据?
    6 楼 gyang2 2008-11-11  
    若list中又有list,第二个list中才方person对象,如何从页面传值到action?如何些conversion.properties文件?
    5 楼 darkjune 2008-11-11  
    lingzantia 写道

    搞定拉,吧Xwork1的CollectionFieldValidator和DefaultActionValidatorManager拷过来改一点就好拉

    这种改动是维护了一个自己版本的xwork, 对以后升级不利
    4 楼 lingzantia 2008-09-29  
    搞定拉,吧Xwork1的CollectionFieldValidator和DefaultActionValidatorManager拷过来改一点就好拉
    3 楼 lingzantia 2008-09-29  
    struts2用的是xwork2库,而xwork2中并没有CollectionFieldValidator这个验证器,该如何处理?从xwork1拷贝过去?
    2 楼 darkjune 2008-03-28  
    我用regex配置的正则不能拦截表单提交,有时候还会报错,不知道为什么
    1 楼 kjj 2008-03-27  
    collection 验证,没问题,我成功了

    相关推荐

    Global site tag (gtag.js) - Google Analytics