struts2数据校验小结

来源:互联网 发布:黄金分析软件哪个好 编辑:程序博客网 时间:2024/04/25 19:39

数据校验

 

1、 复合属性和集合属性校验::集合属性校验需要三个文件,一个ActionName-validation.xml文件,用来表示配置哪个Action的数据校验,其类型需要为vistor类型,field的name属性为Action中的属性名。在field-validator子元素下,需要指定context属性和appendPrefix属性。Context属性值表示该集合属性的检验其名称,appendPrefix表示是否在校验信息中刚加入前缀信息。还需要一个类名-context值-validation.xml文件,其中类名为校验的Action中的属性所属的复合类的名,context值为之前那个xml文件中context的值。这个xml文件中的配置和普通的校验配置没什么区别,如name为属性的字段名,另外还需要一个ActionName.properties文件,其内容为Element_属性名=类名路径。如:一个POJO类为User;其中有userName,userEmail等字段,其对应的Action为UserAction,该Action中有一个List<User>user属性,则校验userName的配置文件为

UserAction.xml:

<?xmlversion="1.0"encoding="gb2312"?>

<!DOCTYPEvalidators PUBLIC "-//OpenSymphony Group//XWorkValidator 1.0.2//EN""http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>

   <field name="user">

      <field-validatortype="visitor">

          <paramname="context">userContext</param>

          <paramname="appendPrefix">true</param>

          <message>联系人</message>

      </field-validator>

   </field>

</validators>

User-userContext-validation.xml:

<?xml version="1.0"encoding="gb2312" ?>

<!DOCTYPE validators PUBLIC"-//OpenSymphony Group//XWork Validator 1.0.2//EN""http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>

   <field name="userName">

      <field-validatortype="requiredstring">

          <message>姓名不能为空!</message>

      </field-validator>

   </field>

   <field name="userEmail">

      <field-validatortype="email">

          <message>请输入正确的邮箱地址</message>

      </field-validator>

   </field>

</validators>

 

UserAction.properties:

Element_user=entity.User

 

注意:

1User-userContext-validation.xml必须和User类文件在同一目录下

2、对于普通的符合属性,有两种校验方式,一是按照OGNL表达式语法,在jsp和xml配置文件中都用”属性名.字段名”进行配置,则不需要visitor校验器  和properties文件,只需要普通的ActionName-validation.xml文件即可,如验证Action中的一个属性Useruser,则在UserAction-validation.xml中配置field时,指定name属性的值为“user.userName“即可。

3、不管是什么样的情况,总要在struts.xml文件中配置input逻辑视图对应的资源文件,因为当校验不通过时,系统会返回input,然后对应找到相应的视图文件。

 

2、 Struts2对于客户请求,首先是客户端的js校验,然后进行类型转化,不管转换对不对,接着进行数据校验。在类型转换和服务器端输入校验过程中,无论出现什么错误,系统都不会执行execute()方法,将转向该Action对应的input视图。

3、 Struts2数据校验有两种方式,一是继承Action类ActionSupport类,重写validate()方法,在该方法中将校验信息通过addActionError()和addFieldError()添加fieldError中。Struts在执行execute之前,会先执行validate方法。对于Action中的其他方法,则需要添加validateXXX()方法,如Action中有一个add()方法和一个validateAdd()方法,系统会在执行add()之前先执行validateAdd()方法。(通过反射调用的)这里要注意,如果Action中同时有validateXXX()方法和validate()方法,则他们都会被调用,并都会起到校验作用。不论Action请求的是哪一个处理逻辑,validate()方法都会起到校验作用。且validateXXX()方法会在validate()方法之前被调用。不推荐使用这种校验方式,因为这样会使代码比较混乱。二是使用校验框架,如配置XXXAction-validation.xml文件,这将在下面详述。

4、 ActionSupport中的addActionError()方法的实现:首先创建一个ArrayList对象,然后将错误信息添加到这个对象中。当调用getActionError()时,返回的是结合的一个副本而不是集合本身。所以当用this.getActionError().clear()或者this.getFieldError().clear()时清除的是副本中的元素而不是原集合中的元素,所以那些Error信息仍然存在。换句话来说,Action级别的校验错误信息对开发者来说是只读的。不过可以通过clearActionErrors()和clearFieldErrors()来直接清除多有错误,这样程序将转到会执行execute();

5、 fieldError校验信息的底层是通过LinkedHashMap来实现的,该Map的key是String类型,value是List<String>类型。也就是说,一个fieldName可以对应多条错误信息,这些信息存放在List<String>中。

 

6、 Strues2内建校验器,括号内为常用或必须配置的参数:必填校验器required;必填字符串校验器requiredstring;字符串长度校验器stringlength(minLength和maxLength);整数校验器int(min,max);类型转换校验器conversion(repopulatedField指定当出现转换错误时,input视图是都要保留原值,默认true;另外还可以添加一个ActionName.properties文件用来优化提示信息);日期校验器date(mix,max);浮点数校验器double(minInclusive,maxInclusive,minExclusive,maxInclusive);邮箱地址校验器email;网址校验器url;表达式校验器expression(基于OGNL表达式,只能使用非字段风格配置);字段表达式校验器fieldexpression(expression);正则表达式校验器;visitor校验器(详见第一条)。

7、 自定义校验器。如果内建校验框架不能满足要求,则可自定义一个校验器。需继承FieldValidaorSupport类,重写validate方法,然后在src或classes文件夹下添加validator.xml文件进行注册。注册是需要将default.xml文件中的所有内容复制进来,否则默认验证文件不生效了。不推荐使用这种方法!

0 0
原创粉丝点击