第10章-验证框架 --- 验证器类型


第10章-验证框架 --- 验证器类型

  可以把验证器分为两个类型: 字段验证器和动作验证器。

  字段验证器:只验证提交的表单内的单个字段。

  动作验证器:一般验证提交的表单内多个字段的关系。(比如,录入产品信息的时候,产品进价不能高于售价)

 

  无论是哪种验证器,都需要考虑以下几个问题:

  1.验证谁?

  2.使用什么条件验证?

  3.不满足条件显示什么结果?

  4.不满足验证条件时,显示的结果出现在页面的什么位置?

 

(一)字段验证器

  字段验证器用来验证提交的表单内的单个字段,在验证文件里: 

复制代码
<validators>
    <field name="user.account">
        <field-validator type="requiredstring">
            <message>请输入账号</message>
        </field-validator>
    </field>
    
    <field name="user.name">
        <field-validator type="requiredstring">
            <message>请输入姓名</message>
        </field-validator>
    </field>
    
    <field name="user.age">
        <field-validator type="int">
            <param name="min">18</param>
            <message>年龄必须在18岁以上,您输入的是${user.age}</message>
        </field-validator>
    </field>
</validators>
复制代码

 

  <validators>元素作为整个验证文件的根元素。

  <validators>元素的<field>子元素就是字段验证器,<field>元素的name属性就是这个字段验证器要验证的那个字段。

  一个<field>元素可以有多个<field-validator>元素

  每一个<field-validator>元素是对这个字段的一种验证条件,它的type属性就是具体的验证器,在这里引用了内置的int验证器。

  还可以给<field-validator>元素添加<param>子元素来设置验证条件的参数,添加<message>子元素来设置验证错误时返回的信息。在<message>元素中写出的文本将直接作为错误的信息返回,如果<message>元素存在key属性,它将引用国际化信息。

 

(二)动作验证器

  与字段验证器只验证单个字段相比,动作验证器应用于整个动作(Action),一般用于验证提交的表单内的多个字段的关系,当然也可以验证单个字段。

  示例,假定要求输入的账号也为数字,并要求输入的age值要大于账号的值。

  那么在验证文件里,可以按照如下写法:

  <validator type="expression">

    <param name="expression"><![CDATA[user.age >= user.account]]></param>

    <message>年龄必须在${user.account}岁以上,您输入的是${user.age}</message>

  </validator>

 

  <validators>元素作为整个验证文件的根元素。

  <validators>元素的<validator>子元素就是动作验证器。其type属性为expression,引用了内置的表达式验证器,这个验证器需要一个name属性作为expression的<param>子元素为其指定表达式。

  对于动作验证器,它返回的错误信息并不会直接显示在<s:textfield name="user.age"/>对应的文本框上方,需要使用<s:actionerror/>标签去引用。

  代码如下:

复制代码
    <s:fielderror/>
        用户注册:
        <hr/>
        <s:actionerror/>
        
        <s:form action="/registerAction.action" method="post">
        <s:textfield name="user.account" label="账号"/>
        <s:textfield name="user.name" label="姓名"/>  
        <s:submit value="注册"/>       
        </s:form>
posted @ 2014-04-11 07:24  JAVA之迷  阅读(199)  评论(0编辑  收藏  举报