校验文件的命名为XXXAction-validation.xml,其中的XXXAction就是我们需要指定校验规则的类,校验规则如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 指定校验配置文件的DTD信息 -->
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<!-- 校验文件的根元素 -->
<validators>
<!-- 校验Action的指定属性 -->
<field name="属性值">
<!-- 指定该属性必须满足的规则 -->
<field-validator type="规则">
<param name="trim">true</param>
<param name="min">最小值</param>
<param name="max">最大值</param>
<message key="失败时,国际化文件中的消息"/>
</field-validator>
<!-- 指定该属性必须匹配正则表达式 -->
<field-validator type="regex">
<param name="regex"><![CDATA[(\w{4,25})]]></param>
<message key="国际化文件中的名称"/>
</field-validator>
</field>
</validators>
上面为字段校验器配置风格,struts2还支持非字段校验器还有短路校验器,非字段校验器的使用和目的和字段校验器没有不同,短路校验器需要在:
<field-validator type="regex" short-circuit="true">
...
</field-validator>
显式的将short-circuit值设置为true,从而当该校验器失效时,其他校验器根本不会工作。下面介绍几种常用的校验器:
<field-validator type="required" ><!--必填校验器--></field-validator>
由@RequiredStringValidator进行代替
<field-validator type="requiredstring" ><!--必填字符串校验器--></field-validator>
由@RequiredStringValidator进行代替
<field-validator type="int" ><!--必填整数校验器,可配合mix、max--></field-validator>
由@IntRangeFieldValidator进行代替
<field-validator type="date" ><!--必填日期校验器,可配合min、max--></field-validator>
由@DateRangeFieldValidator进行代替
<field-validator type="expression" >
<!--基于OGNL表达式、和ValueStack求值-->
<param name="expression">...</param>
</field-validator>
<field-validator type="email" ><!--邮件校验器--></field-validator>
<field-validator type="url" ><!--URL校验器--></field-validator>
<field-validator type="visitor" >
<!--复合属性校验器,用于对Action中比较复杂的属性进行校验-->
<param name="context">专门用于该复合属性校验的校验文件</param>
</field-validator>
<field-validator type="conversion" >
<!--转换校验器-->
<param name="repopulateField">true(转换失败后原页面保留错误输入)</param>
</field-validator>
<field-validator type="stringlength" >
<!--字符串长度校验器-->
<param name="minLength">4</param>
<param name="maxLength">20</param>
</field-validator>
<field-validator type="regex" >
<!--正则表达式校验器-->
<param name="regex"><![CDATA[(\XXX)]]></param>
</field-validator>
由@RegexFieldValidator进行校验
校验失败之后通过<s:fielderror/>来在jsp页面上输出上传失败的信息
ps.注解需要加在对应属性的setter方法上,这一点和SpringMVC直接加在属性上有所不同
如果上面已经提供的检验器还不能满足您的需求,可以通过重写validate()方法和validateXXX()方法进行自定义的检验其中XXX为方法名,检验的结果通过addFieldError方法进行添加
结合struts2数据转换,可以发现struts2的处理流程是: