Struts2的校验框架(有效的xml文件)。具体来说分为字段优先校验器与校验器优先校验器。
校验框架的XML文件是放在跟待校验Action是放在同一个包下面的.命名也有规则.如RegisterAction-validation.xml这个XML文件是通过DTD来验证的.dtd从哪里来?去示例哪里找.他的dtd的声明如下:
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
字段优先校验器以Action里面的字段做为参考,对他施加校验规则.典型的如下:
<field name="username">
<field-validator type="requiredstring">
<message>
username can't be blank
</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">4</param>
<param name="maxLength">6</param>
<message>length of username must between 4 and 6</message>
<message>length of username must between ${minLength} and ${maxLength}</message>
<!--
<message key="username.invalid"/>
-->
</field-validator>
</field>
field-validato称为验证规则,message为验证不通过时的错误信息,注意message里面可以用类似这样的方式${minLength} ,并且message的提示信息还可以跟国际化关联起来如这个<message key="username.invalid"/>,但这个国际化资源文件的命名是有规则的,对于国际化的资源文件,其命名规则是:package_语言名_国家名,比如package_zh_CN,package_en_US,param指定这个校验器额外的信息,如最小长度,最大长度.
疑问:校验规则从哪里来呢?是从xwork来的,查看com.opensymphony.xwork2.validator.validators里面的类和default.xml文件,这个default.xml文件里面配置了默认的校验规则,如其中一个<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>,即是用RequiredStringValidator这个类去进行验证
再问:校验器的param参数从哪里来的呢?就在他的那些类里面,得到之后就set进去,实际上他也是调用了一个validate的方法.
校验器优先:以校验器为参照物,对他施加字段,他是先有校验器,后才施加字段.<param>name=fieldName是固定的.典型的如下:
<validator type="requiredstring">
<param name="fieldName">username</param>
<message>username can't be blank</message>
</validator>
<validator type="stringlength">
<param name="fieldName">username</param>
<param name="minLength">4</param>
<param name="maxLength">6</param>
<message>length of username must between ${minLength} and ${maxLength}</message>
</validator>
通过断点调试可以知道校验框架,自定义的验证方法,struts提供的validate方法的执行顺序.最后才会检查Action级别和Field级别里面有没有错误消息,然后再作其他的处理.
Struts2框架校验执行的先后顺序:
1) 首先执行校验框架(xml文件)
2) 执行自定义方法的校验方法(validateMyExecute)
3) 执行validate方法