读书人

Sturts2应验框架

发布时间: 2012-11-11 10:07:57 作者: rapoo

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>

读书人网 >软件架构设计

热点推荐