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