数据校验的几种方式

数据校验

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属性,则校验userName的配置文件为

UserAction.xml:

"1.0" encoding="gb2312" ?>

    "user">

       "visitor">

           "context">userContext

           "appendPrefix">true

           联系人

       

    

User-userContext-validation.xml:

"1.0" encoding="gb2312" ?>

    "userName">

       "requiredstring">

           姓名不能为空!

       

    

    "userEmail">

       "email">

           请输入正确的邮箱地址

       

    

 

UserAction.properties:

Element_user=entity.User

 

注意:

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

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

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

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


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文件,即xml配置文件的校验

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


自动校验的实现步骤: ActionSupport中的addActionError()方法的实现:首先创建一个ArrayList对象,然后将错误信息添加到这个对象中。当调用getActionError()时,返回的是结合的一个副本而不是集合本身。所以当用this.getActionError().clear()或者this.getFieldError().clear()时清除的是副本中的元素而不是原集合中的元素,所以那些Error信息仍然存在。换句话来说,Action级别的校验错误信息对开发者来说是只读的。不过可以通过clearActionErrors()和clearFieldErrors()来直接清除多有错误,这样程序将转到会执行execute();fieldError校验信息的底层是通过LinkedHashMap来实现的,该Map的key是String类型,value是List类型。也就是说,一个field Name可以对应多条错误信息,这些信息存放在List中。---不推荐使用这种方法!


自动校验的注意事项: 

 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校验器



手动校验的例子:


public void validate() {

if(info == null)

addFieldError("userName", "未输入用户名");//保存错误

}


使用校验框架的例子:

required  必填校验器

       性别不能为空!

requiredstring  必填字符串校验器

       true
       用户名不能为空!

stringlength:字符串长度校验器

 10
 2
 true
 

email:邮件地址校验器

 电子邮件地址无效

regex:正则表达式校验器

    
     手机号格式不正确!

int:整数校验器

 1
 150
 年龄必须在1-150之间

字段OGNL表达式校验器

 
  
  文件不能为空
 

http://blog.163.com/taodengwen@126/blog/static/87199341201282531133155/

http://blog.sina.com.cn/s/blog_705b5fbb01012v84.html

http://developer.51cto.com/art/201103/251944.htm



你可能感兴趣的:(数据校验的几种方式)