1.1.1.1.1.1 validation.xml
Validator框架所需要的第二个配置文件是validation.xml,这个配置文件是具体应用(项目)所特定的,可以根据你的应用(项目)情况进行自定义配置。它描述了具体的ActionForm使用validation-rules.xml文件中的哪个校验规则进行校验。
validation_1_1.dtd定义了validation.xml的结构,根元素为form-validation,其包含0到多个global元素和一到多个formset元素:
<!ELEMENT form-validation (global*, formset+)>
global元素包含0到多个constant子元素:
<!ELEMENT global (constant*)>
constant子元素和Java里面常量的含义是一样的,下面的片断定义了两个常量:
<global>
<constant>
<constant-name>phone</constant-name>
<constant-value>^\(?(\d{3})\)?[-| ]?(\d{3})[-| ]?(\d{4})$</constant-value>
</constant>
<constant>
<constant-name>zip</constant-name>
<constant-value>^\d{5}(-\d{4})?$</constant-value>
</constant>
</global>
上面的片断包含了两个常量,phone 和zip,这些常量在所有formset元素中有效,在formset中通过名称引用这些常量。
下面的片断展示了一个简单的validation.xml文件说明:
代码片断 3.3.3.3.1.3.1
<form-validation>
<global>
<constant>
<constant-name>phone</constant-name>
<constant-value>^\(?(\d{3})\)?[-| ]?(\d{3})[-| ]?(\d{4})$</constant-value>
</constant>
</global>
<formset>
<form name="checkoutForm">
<field
property="phone"
depends="required,mask">
<arg0 key="registrationForm.firstname.displayname"/>
<var>
<var-name>mask</var-name>
<var-value>${phone}</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
在上面的代码片断中,var元素应用了在global中定义了phone常量,用来配合对phone属性的校验。
formset元素可以包含两个子元素,constant和form。constant元素和global区域定义的constant元素格式和用途一样,只不过作用范围不同,在formset中定义的constant元素其作用范围只限于该formset覆盖区域。Formset元素中的form元素至少要出现一次。DTD描述如下:
<!ELEMENT formset (constant*, form+)>
form元素定义了需要进行校验的域,其name属性对应应用中分配给form的标识,在Struts框架中,就是在Struts配置文件中form-beans区域定义的ActionForm的name属性。
下面是form元素的DTD定义:
<!ELEMENT form (field+)>
field元素指明了JavaBean中需要被校验的属性。在上面的代码片断中,在Struts中,ActionForm就是这个需要被校验的JavaBean。在代码片断 3.3.3.3.1.3.1中,定义了对Struts配置文件中名称为checkoutForm的ActionForm所拥有的名称为phone的属性的校验说明,表示checkoutForm的phone属性为必填项而且符合${phone}所定义的正则表达式的掩码规则。field元素的属性在下表中具体描述:
属性
描述
property
JavaBean(在Struts为ActionForm)中需要被校验的属性的名称。
depends
应用于property指定属性的校验规则列表,多个校验规则之间用逗号分隔。
page
这个属性在应用于“向导”模式的form中,用来确保不会跳页访问。
indexedListProperty
不会用
表3.3.3.3.1.3.1 field元素的属性列表
field元素包含以下几个子元素,DTD定义如下:
<!ELEMENT field (msg?, arg0?, arg1?, arg2?, arg3?, var*)>
msg子元素允许你为该field指定一个提示信息,校验规则将会使用这个指定的提示信息替代规则默认的提示信息,msg子元素的值必须是应用资源文件的一个关键字(key)。例如:
<field property="phone" depends="required,mask">
<msg name="mask" key="phone.invalidformat"/>
<arg0 key="registrationForm.firstname.displayname"/>
<var>
<var-name>mask</var-name>
<var-value>${phone}</var-value>
</var>
</field>