使用xml文件完成属性的验证
一共有六个字段(也就是表单的六个属性).分别是 username ,password ,repassword ,age,birthday,graduation ..要求是 每个属性不能为空,前面三个必须在6到10个字符之间.年龄在1到150之间.birthday 为2001-01-01到2003-12-31之间,graduation在2005-01-01与2007-12-31之间..这些就是我们这节要实现的需求..
当然,还有其他需求,比如password与repassword必须相等,还有bithday必须在graduation之前.
配置xml文件.放在action 对应的包里面 包名是ActionName-validation.xml
这里的规则是 "-validation.xml"部分固定...前面加上action类的类名...
比如这里就是RegisterAction-validation.xml 代码如下
<?xml version="1.0" encoding="UTF-8"?>
<!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-validator type="requiredstring"> //表示输入字符串类型的要求 这里是空值的验证
<param name="trim">true</param>//表示去空格为真.就是所有的字符串都要经过去字符串.这条默认,可以不写
<message>username should not be blank!</message>//如果验证失败,显示的信息
</field-validator>
<field-validator type="stringlength">//表示字符串长度验证
<param >6</param>
<param name="maxLength">10</param>
<message>username should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message>password should not be blank!</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>password should be between ${minLength} and ${maxLength}</message>//注意这里可以用${}
</field-validator>
</field>
<field >
<field-validator type="requiredstring">
<message>repassword should not be blank!</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>repassword should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field>
<field name="age">
<field-validator type="required">//注意,这里不是requiredstring.因为age不是字符串类型..其他类型都用required
<message>age should not be blank!</message>
</field-validator>
<field-validator type="int">//同理,这里用 int
<param name="min">1</param>
<param name="max">150</param>
<message>age should be between ${min} and ${max}</message>
</field-validator>
</field>
<field name="birthday">
<field-validator type="required">
<message>birthday should not be blank!</message>
</field-validator>
<field-validator type="date">
<param name="min">2001-01-01</param>
<param name="max">2003-12-31</param>
<message>birthday should be between ${min} and ${max}</message>
</field-validator>
</field>
<field name="graduation">
<field-validator type="required">
<message>graduation should not be blank!</message>
</field-validator>
<field-validator type="date">
<param name="min">2005-01-01</param>
<param name="max">2007-12-31</param>
<message>graduation should be between ${min} and ${max}</message>
</field-validator>
</field>
</validators>
注意,显示错误信息可以有addFieldError方法,还有addActionError方法.我们之前说的都是前面那个...这两个方法都会返回一个input 消息提示验证失败.区别在于,在<s:form>标签内只能显示addFieldError的错误信息.也就是说,如果你的validate方法里面是写addActionError 那么,只使用<s:form>将不显示错误信息.这个时候,我们就必须在JSP页面里面添加 <s:actionerror>标签..这样就会显示addActionError 里面的错误信息..
配置文件的方法来验证返回的是addFieldError方法.也就是说,你可以在页面上加 <s:fielderror>标签,或者使用<s:form>标签.
上面说的xml验证叫做属性验证..他用<field>标签对应需要的验证的属性..还有一种是非属性验证..他对应的是验证的方式.比如,我要验证<stringlength>.然后再子标签里说明需要验证哪几个属性.这种办法和属性验证是一样的.不多说了.估计我是不想用了.因为对于业务逻辑来说不清晰.
还有一点.和之前实现validate方法是一样的,我这个xml文件是对于那个action来说是全局的.也就是说我调用那个action里的每一个方法都需要经过这个验证.很明显,这样也是不合理的.所以,struts里面你可以定义一个局部的xml文件来验证,你可以定义这样一个文件
RegisterAction-test-validation.xml 其中.test表示,只有在调用RegisterAction里的test方法的时候才会调用这个xml文件进行验证..这个xml文件里面的写法和上面的一样.不多说了
如果全局验证的和局部验证的都存在.那么两个都执行..顺序是先全局的,后局部的.和之前的validate也是一样的