Sturts2验证框架
Sturts2内建验证器
名称 参数 功能
1. required没有检验值非空
2. requiredstringtrim(默认为true)检验值非空,并且不是字符串
3. stringlengthtrim(默认为true)验证字符串长度在限定范围内
minLength,maxLength
4. intmin,max验证整数值在参数指定范围内
5. double minInclusive,maxInclusive
minExclusive,maxExclusive 验证浮点值在参数范围内
6. datemin,max验证日期在指定范围内
7. email没有验证电子邮件格式
8. url没有验证URL格式
9. fieldexpressionexpression(必须)根据当前ValueStack解析OGNL表达式.表达式必须返回true或者false决定验证是否成功
10. expressionexpression(必须)与fieldexpression相同,但用在动作级别
11. visitorcontext,appendPrefix将域对象属性(如User)的验证转交给域对象本地的验证声明
12. regxexpression(必须),caseSensitive,trim验证String遵循给定的正则表达式
使用示例
ActionClass-validation.xml (如:Register-validation.xml)
<validators>
<!-- 字段验证器 -->
<field name="password" >
<filed-validator type="requiredstring">
<message>You must enter your password</message> 或者 <message key="password.required" />
</field-validator>
</field>
<!-- 动作验证器 -->
<validator type="expression">
<param name="expression"> username != password </param>
<message>Username and password can't be the same. </message>
</validator>
</validators>
ActionClass-validation.xml可以对模型类(如:User)使用,也可以对动作(如:Register)使用
使用visitor验证器在域对象级别验证
1.在User-validation.xml中配置User类的验证器
2.在UpdateAccount-validation.xml中使用visitor验证器将UpdateAccount动作的验证任务交还给User
<validators>
<field name="user">
<field-validator type="visitor">
<message> User : </message>
</field-validator>
</filed>
</validators>
对Action中的不同方法使用不同验证器
若Update方法中有admin和public两个方法
<action name="adminUpdate" class=com.v.Update" method="admin" >
<result...>
xml文件写为 Update-Admin-validation.xml
<action name="adminUpdate" class=com.v.Update" method="public" >
<result...>
xml文件写为 Update-Public-validation.xml
jsp中的写法
<s:fielderror>
<param> teacher.teacherName </param>
</s:fielderror>
teacher.teacherName需要验证的字段
3.在对象级别上使用验证器
如对Department进行验证
<validators>
<field name="departmentName">
<field-validator type="stringlength">
<param name="minLength">1</param>
<param name="maxLength">32</param>
<message>部门名字长度必须在1~64字内</message>
</field-validator>
</field>
<field name="departmentCode">
<field-validator type="stringlength">
<param name="minLength">1</param>
<param name="maxLength">20</param>
<message> 部门编码长度必须在1~20位内</message>
</field-validator>
<field-validator type="regex">
<param name="expression">\d+</param>
<message>部门编码必须为数字</message>
</field-validator>
</field>
</validators>
然后再Action动作中使用visitor转移验证即可
<validators>
<field name="department">
<field-validator type="visitor">
<message></message>
</field-validator>
</field>
</validators>
其中 <field name="department"> 为Action公开在ValueStack上的属性
4.使用visitor验证器和域对象验证上下文
UpdateUserActionUpdateUserAdmin-validation.xml
<validators>
<field name="user">
<field-validator type="visitor">
<param name="context">admin</param>此处使用域对象级别上的User-admin-validation.xml定义的验证
<message> User : </message>
</field-validator>
</filed>
</validators>
验证器链短路效应
<field name="password" >
<field-validator type="stringlength" shot-circuit="true"> //shor-circuit设为true,则当stringlength验证失败时,XXX验证器不会继续执行,节省资源
...
</field-validator>
<field-validator type="XXX">
...
</field-validator>