在《Strutsx系列教程()Validator验证框架入门》一文中给出的例子中的nameage和email都是简单的属性如果是嵌套的属性(也就是一个属性的数据类型是另外一个带有属性的类)可以使用圆点()符号来访问如我们可以通过设置<field>元素的property属性值为employeesalary来验证employee属性中的salary属性
如果要验证的索引属性我们可以使用<field>元素的indexedListProperty属性来指定这个索引属性如下面代码如示
<fieldindexedListProperty=itemsdepends=></field>
在使用上述配置代码后Validator框架将会按着depends属性中的约束来验证items属性的每一个值我们还可以将property和indexedListProperty配合使用如下面代码所示
<fieldindexedListProperty=itemsproperty=employeeagedepends=></field>
Validator框架将根据上述的配置代码来验证items属性中的每一项的employeeage属性
二使用常量和变量
常量
在《Strutsx系列教程()Validator验证框架入门》一文中的name属性使用了mask进行验证这个mask实际上代表了一个正则表达式但如果在validatorxml文件中有很多个地方需要用到这个正则表达式那就它就会在很多地方重复为此我们可以使用常量来避免这种事情发生
常量分为全局常量和局部常量
()全局常量
全局常量可以被用在validatorxml中定义的所有form中我们可以使用<global>元素来配置全局常量为了配置全局常量将如下的内容放到第一个<formset>元素的前面
<global>
<constant>
<constantname>mask</constantname>
<constantvalue>^[azAZ]*$</constantvalue>
</constant>
</global>
<formset>
()局部常量
局部常量需要放到<formset>元素的开始位置(根据DTD的定义局部常量只能放到这里而全局常量可以放在第一个<formset>元素的前面也可以放到<formset>的后面)如下面的代码所示
<formset>
<constant>
<constantname>mask</constantname>
<constantvalue>^[azAZ]*$</constantvalue>
</constant>
<formname=firstValidatorForm>
</formset>
我们可以编写如下的代码来使用mask常量
<var>
<varname>mask</varname>
<varvalue>${mask}</varvalue>
</var>
变量
Validator框架通过<var>元素来定义变量变量将作为<field>的子元素被使用主要向depends属性值(如mask)以及<msg>的错误信息传递数据如下面的代码通过变量required将姓名传递给了错误信息的第一个参数{}
<fieldproperty=namedepends=required>
<msgname=requiredkey=errornameblank/>
<argname=requiredkey=${var:required}position=resource=false/>
<var>
<varname>required</varname>
<varvalue>姓名</varvalue>
</var>
</field>
三客户端验证
使用Validator框架的好处之一就是可以很容易地将服务端验证变为客户端验证(JavaScript验证)为了完成这一转换我们只需要修改两个地方现在就拿《Strutsx系列教程()Validator验证框架入门》中的firstValidatorjsp为例来说明要修改什么
首先在firstValidatorjsp中的任何地方(当然任何地方指的是客户端代码区并不包括<%……%>和<%——…… ——%>所包含的内容)添加如下的<htmljavascript>标签
<html:javascriptformName=firstValidatorForm/>
然后在<htmlform>标签中加入如下的属性
onsubmit=returnvalidateFirstValidatorForm(this);
现在再运行firstValidatorjsp如果输入错误IE就会直接弹出错误信息对话框我们查看客户端源代码就会发现在源代码中多了很多JavaScript代码实际上当加入<htmljavascript>标签后在运行JSP页面时Servlet引擎就会将Validator框架中JavaScript版本的预定义验证代码连同HTML代码都发送到客户端这些JavaScript代码中有一个入口函数这个函数的名称前缀为validate后面是首字母大写的Form名在<htmlform>标签中的onsubmit事件中调用这个入口函数就可以通过JavaScript代码来验证客户端录入的数据了