Sturts2验证框架

Sturts2内建验证器

   名称                  参数                   功能

1. required 没有 检验值非空

2. requiredstring trim(默认为true) 检验值非空,并且不是字符串

3. stringlength trim(默认为true) 验证字符串长度在限定范围内
minLength,maxLength

4. int min,max 验证整数值在参数指定范围内

5. double minInclusive,maxInclusive
minExclusive,maxExclusive  验证浮点值在参数范围内

6. date min,max 验证日期在指定范围内

7. email 没有 验证电子邮件格式

8. url 没有 验证URL格式

9. fieldexpression expression(必须) 根据当前ValueStack解析OGNL表达式.表达式必须返回true或者false决定验证是否成功

10. expression expression(必须) 与fieldexpression相同,但用在动作级别

11. visitor context,appendPrefix 将域对象属性(如User)的验证转交给域对象本地的验证声明

12. regx expression(必须),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>

猜你喜欢

转载自chinagdvea.iteye.com/blog/1015552
今日推荐