Struts2数据输入校验(2)

struts2提供了通过XML方式对输入数据进行验证的校验框架。

在与XXXAction同级的目录下,建立XXXAction-validation.xml,即为该Action的校验逻辑。

该校验XML的dtd格式文件为 http://www.opensymphony.com/xwork/xwork-validaTor-1.0.2.dtd,具 体内容可以展开下面的代码:

<!--  XWork ValidaTors DTD.  Used the following DOCTYPE.  -->

可以看到,数据校验XML的根元素下面可以包含两种 子元素:field和 validaTor

1、前者field   是针对字段进行的校验;

2、后者validaTor 是非字段或者说全局范围的校验。

在介绍完校验是怎么回事后,后面会简单比较一下两种校验方式的区别。

一、字段校验:(field)

先看个基本示例

                                           true       4       10       password should be ${minLength} to ${maxLength} characters long.         

有几个地方需要注意一下的。

1、field-validaTor的type在哪里定义的?

struts2校验框架预设的类在包com.opensymphony.xwork2.validaTor.validaTors中,同一目录下的 default.xml中定义了field-validaTor中type的名称和对应的处理类。

default.xml                                      

其中,name是上面type需要引用的名字,而后面的class则是这些validaTor对应的类。这些类中大部 分都是自解释的,其中fieldexpression比较特殊,它提供了一种多个field之间比较值的机制。

2、param的值又是在哪里找到的呢?

param中的name值在上述类中被定义为属性。譬如说在类 com.opensymphony.xwork2.validaTor.validaTors.StringLengthFieldValidaTor中(也就是 stringLength对应的处理类),就定义了

boolean trim;

int minLength,maxLength;

及它们的get/set方法。

3、message的注意事项

(1)每个field都必须拥有一个message;message错误信息最后是以addFieldError实现的,也就是说是 field一级的错误。

(2)message中可以引用param变量,引用格式为${param1},如上面的例子中对password验证失败的报错 信息。

(3)message的内容可以放到全局i18n属性文件中,并在message中以key属性值指定,比如上面例子中 对username验证失败的报错信息。

二、非字段校验/全局校验

全局校验和字段校验其实类似,使用的验证器也是那些。区别在于校验的方式和关注点不同:

1、字段校验先指定那个字段要校验,再指定用那些校验器来校验该字段;

2、全局校验不针对特定字段,先指定验证器,再来指定用该校验器校验那些字段。

基本示例如下:

        username     password     password_confirmed                  true       4       10       password       password_confirmed       password should be ${minLength} to ${maxLength} characters long.  

示例很简单,第一个validaTor是校验“不为空的字符串”,校验“用户名”、“密码”、“确认密码 ”字段,第二个校验器校验“字符串长度6-10”,校验“密码”、“确认密码”两个字段。

很明显,如果页面中存在一些共性的验证要求,用这种方式就比针对字段的验证要方便。但这种方式 可能不如前一种方式清晰易读。

两种验证方式可以混用。

三、其他问题

1、对多验证和跳转逻辑的支持

和《Struts2 数据输入校验(1) —— 函数验证 》中所说内容一样,校验框架也支持多验证和跳转逻 辑。比如说在struts.xml文件中配置了

    success.jsp

则校验文件的名字为XXXAction-newExcuteName-validation.xml

当然,在执行了上面的校验之后,如果存在XXXAction-validation.xml,则还会执行这个文件中定义 的校验。

同时需要注意的是,如果该Action存在父类,则会先行执行父类的相应校验。

2、客户端校验

客户端校验是不安全的,但struts仍然提供了客户端的校验

方法是在中设置validate属性为true,如果该属性被设置,则struts不会在服务器端验 证,取而代之的是在客户端生成Javascript代码。但这些Js代码功能较弱,灵活度也比较低,且不会刷新 。因此不推荐使用。

其实struts的控件本身和一般的HTML控件一样,如果想做客户端验证,可以触发它们的onXXX()事件, 和通常的HTML页面做法一样。

生活若剥去了理想、梦想、幻想,那生命便只是一堆空架子

Struts2数据输入校验(2)

相关文章:

你感兴趣的文章:

标签云: