《Struts1.x系列教程(10):Validator验证框架入门》
一文中
给出的例子中的name
、age
和email
都是简单的属性,如果是嵌套的属性(也就是一个属性的数据类型是另外一个带有属性的类),可以使用圆点(.)
符号来访问。如我们可以通过设置
元素的property
属性值为“employee.salary
”来验证employee
属性中的salary
属性。
如果要验证的索引属性,我们可以使用元素的indexedListProperty属性来指定这个索引属性,如下面代码如示:
局部常量需要放到元素的开始位置(根据DTD的定义,局部常量只能放到这里,而全局常量可以放在第一个元素的前面,也可以放到的后面)。如下面的代码所示:
2. 变量
Validator框架通过元素来定义变量。变量将作为的子元素被使用。主要向depends属性值(如mask)以及的错误信息传递数据。如下面的代码通过变量required将“姓名”传递给了错误信息的第一个参数{0}。
如果要验证的索引属性,我们可以使用元素的indexedListProperty属性来指定这个索引属性,如下面代码如示:
<
field
indexedListProperty
="items"
depends
=
>
</
field
>


在使用上述配置代码后,Validator框架将会按着depends属性中的约束来验证items属性的每一个值。我们还可以将property和indexedListProperty配合使用,如下面代码所示:
<
field
indexedListProperty
="items"
property
="employee.age"
depends
=
>
</
field
>


Validator框架将根据上述的配置代码来验证items属性中的每一项的employee.age属性。
二、使用常量和变量
1. 常量
一文中的name属性使用了mask进行验证。这个mask实际上代表了一个正则表达式。但如果在validator.xml文件中有很多个地方需要用到这个正则表达式,那就它就会在很多地方重复。为此,我们可以使用常量来避免这种事情发生。
常量分为全局常量和局部常量。
(1)全局常量
全局常量可以被用在validator.xml中定义的所有form中。我们可以使用元素来配置全局常量。为了配置全局常量,将如下的内容放到第一个元素的前面。
<
global
>
< constant >
< constant-name > mask </ constant-name >
< constant-value > ^[a-zA-Z0-9]*$ </ constant-value >
</ constant >
</ global >
< formset >
< constant >
< constant-name > mask </ constant-name >
< constant-value > ^[a-zA-Z0-9]*$ </ constant-value >
</ constant >
</ global >
< formset >
(2)局部常量
局部常量需要放到元素的开始位置(根据DTD的定义,局部常量只能放到这里,而全局常量可以放在第一个元素的前面,也可以放到的后面)。如下面的代码所示:
<
formset
>
< constant >
< constant-name > mask </ constant-name >
< constant-value > ^[a-zA-Z0-9]*$ </ constant-value >
</ constant >
< form name ="firstValidatorForm" >

</ formset >
< constant >
< constant-name > mask </ constant-name >
< constant-value > ^[a-zA-Z0-9]*$ </ constant-value >
</ constant >
< form name ="firstValidatorForm" >



</ formset >
我们可以编写如下的代码来使用mask常量:
<
var
>
< var-name > mask </ var-name >
< var-value > ${mask} </ var-value >
</ var >
< var-name > mask </ var-name >
< var-value > ${mask} </ var-value >
</ var >
2. 变量
Validator框架通过元素来定义变量。变量将作为的子元素被使用。主要向depends属性值(如mask)以及的错误信息传递数据。如下面的代码通过变量required将“姓名”传递给了错误信息的第一个参数{0}。
<
field
property
="name"
depends
="required "
>
< msg name ="required" key ="error.name.blank" />
< arg name ="required" key ="${var:required}" position ="0" resource ="false" />
< var >
< var-name > required </ var-name >
< var-value > 姓名 </ var-value >
</ var >
</ field >
< msg name ="required" key ="error.name.blank" />
< arg name ="required" key ="${var:required}" position ="0" resource ="false" />
< var >
< var-name > required </ var-name >
< var-value > 姓名 </ var-value >
</ var >
</ field >
三、客户端验证
使用Validator框架的好处之一就是可以很容易地将服务端验证变为客户端验证(JavaScript验证)。为了完成这一转换,我们只需要修改两个地方。现在就拿中的firstValidator.jsp为例来说明要修改什么。
首先,在firstValidator.jsp中的任何地方(当然,任何地方指的是客户端代码区,并不包括和所包含的内容)添加如下的标签:
<
html:javascript
formName
="firstValidatorForm"
/>
然后在标签中加入如下的属性:
onsubmit
=
"
return validateFirstValidatorForm(this);
"
现在再运行firstValidator.jsp ,如果输入错误,IE 就会直接弹出错误信息对话框。我们查看客户端源代码就会发现,在源代码中多了很多JavaScript 代码。实际上,当加入 标签后,在运行JSP 页面时,Servlet 引擎就会将Validator 框架中JavaScript 版本的预定义验证代码连同HTML 代码都发送到客户端。这些JavaScript 代码中有一个入口函数,这个函数的名称前缀为validate ,后面是首字母大写的Form 名。在 标签中的onsubmit 事件中调用这个入口函数就可以通过JavaScript 代码来验证客户端录入的数据了。