第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>