`
wanglihu
  • 浏览: 918215 次
  • 性别: Icon_minigender_1
  • 来自: 黑龙江
社区版块
存档分类

validator验证框架

阅读更多
Validator验证框架
Struts框架能够在ActionForm Bean 的validate()方法中对用户输入的表单数据进行验证。这种验证方法有两种局限性:
 必须通过程序代码来实现验证逻辑,如果验证逻辑发生变化,必须重新编写和编译程序代码。
 当系统中有多个ActionForm Bean,并且它们包含一些相同的验证逻辑时,开发人员必须对每个ActionForm Bean进行重复编程,完成相同的验证逻辑,这会降低代码的可重用性。
Validator框架主要依赖于两个JAR文件:
Jakarta-oro.jar,提供了一组处理文本的类,具有文本替换、过滤和分割等功能。
Commons-validator.jar;提供了一个简单、可扩展的验证框架,包含了通用的验证方法和验证规则。
Validator框架采用两个基于XML的配置文件来配置验证规则。这两个文件为validator-rules.xml和validation.xml。在struts应用中,它们均放在WEB-INF目录下。
validator-rules.xml文件:
validator-rules.xml文件包含了一组通用的验证规则,对所有的Struts应用都适用。
Validation.xml文件
Validation.xml文件是针对于某个具体Struts应用的,需要开发人员来创建,它可以为应用中的ActionForm配置所需要的验证规则。
下面显示了一个简单的validation.xml文件样例。
<form-validation>
<golobal>
  <constant>
<constant-name>phone</ constant-name>
<constant-value>^\d{8}*$</constant-value>
</constant>
</golobal>

<formset>
<form name=”checkoutForm”>
        <field
          property=”phone”
depends=”required,mask,minlength”>
<arg0 key=”label.phone”/>
<arg1 name=”minilength” key=”${var:minlength}” resource=”false”/>
<var>
  <var-name>mask</ var-name >
  <var-value>${phone} </var-value>
</var>
<var>
  <var-name>minlength</ var-name >
  <var-value>7 </var-value>
</var>
</field>
   </form>
  </formset>
</form-validation>

1.<form-validation>元素
validation_1_1.dtd描述了validation.xml文件的语法。validation.xml文件的根元素为<form-validation>元素,它包含两个子元素:<global>和<formset>。<global>元素可以出现零次或多次,而<formset>元素可以出现一次或多次。它们的DTD定义如下:
  <!element form-validation(global*,formset+)>
2.<global>元素
在<global>元素中可以定义<constant>子元素,它用来定义常量表达式,在文件的其余地方可以引用这些常量表达式。以下代码配置了两个<constant>元素:
<golbal>
<constant>
   <constant-name>phone</constant-name>
   <constant-value>^\d{8}\d*$</constant- value >
</constant>
<constant>
   <constant-name>zip</constant-name>
   <constant-value>^\d{6}\d*$</constant- value >
</constant>
</golbal>
以上代码定义了两个常量phone和zip,在<formset>元素中可以通过${constant-name}的形式来引用它们,例如访问phone常量的形式为${phone}.
3.<formset>元素
<formset>元素包含两个子元素:<constant>和<form>。<constant>可以出现零次或多次,<form>元素可以出现一次或多次。

提示 在<global>中定义的<conatant>元素代表全局常量,而在<formset>元素中定义的<conatant>元素代表局部常量,后者只能在当前<formset>元素中使用

<formset>元素有两个属性:language和country。Language和country属性用于支持I18N。本章的10.7节将对此做介绍。
4.<form>元素
<formset>元素的<form>子元素用于为表单配置验证规则,它的name属性指定了表单的名字。<form>元素可以包含一个或多个<field>子元素.
5.<field>
<form>元素的<field>子元素用于配置表单中字段的验证规则。例如对checkoutForm表中的 phone字段配置了验证规则/
对<field>元素的属性做了描述。
<field>元素的属性
Property 指定ActionForm Bean中需要进行验证的字段的名字
Depends 指定字段的验证规则,多个规则之间以逗号隔开。

<field>元素也包含一些子元素,它的DTD定义如下:
<!element field(msg?,arg0?, arg1?, arg2?, arg3?,var*)>

6.<msg>
<field>元素的<msg>子元素指定验证规则的对应的消息文本。该消息文本将替代在validator-rules.xml文件中为验证规则配置的默认的消息文本。例如:
<field property=”phone” depends=”required,mask,minlength”>
<msg name=”mask” key=”phone.invalidformat”/>
….
</field>
以上代码的<msg>元素表明,当”mask”验证规则验证失败时,错误消息文本来自于 Resource Bundle,消息key为 “phone.invalidformat”.
<msg>元素有三个属性, DTD定义如下:
<!ATTLIST msg name CDATA#IMPLIED
key CDATA#IMPLIED
resource CDATA#IMPLIED >
对<msg>元素的属性做说明。
属性 描述
Name 指定验证规则的名字
Key  当resource属性为true时,key属性指定消息key,该消息key应该在Resource Bundle中存在,当resource属性为true时,属性直接指定消息文本
Resource 当此项为true时,表示使用来自 Resource Bundle的消息,如果为false,表示直接在key属性中设置消息文本,默认值为true
7.<arg>元素
<field>元素可以包含四个附加的子元素:<arg0><arg1><arg2><arg3>,用于替换复合消息中的参数。<arg0>元素指定第一个替换值,<arg1>指定第二个值,依次类推。每个arg元素包含三个属性:name、key和resource,这些属性用法和<msg>元素很相似。
包含<arg0><arg1>元素的<field>元素
<field
Property=”phone”
depends=”required,mask,minlength”
<arg0 key=”label.phone”/>
<arg1 name=”minlength” key=”${var:minlength}” resource=”false”/>
<var>
<var-name>mask</var-name>
<var-value>${phone}</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>7</var-value>
</var>
以上代码没有配置<msg>元素,因此当某个验证规则失败时,将使
用在validator-rules.xml中配置的默认消息文本。例如,如果
minlength验证规则失败,则validator-rulex.xml中设置的消息
key为”errors.minlength”:
<validator
name=”minLength”
…..
Msg=”errors.minlength”
</validator>
在资源文件中与errors.minlength匹配的中文消息文本为:
errors.minlength={0}不能少于{1}字符
<arg0>元素没有设置name属性,因此适用于所有验证规则,它将取
代以上复合消息中的第一个参数{0},<arg0>元素的key属性
为”label.phone”,在资源文件中与之匹配的中文消息文本为:
label.phone=电话
<arg1>元素的name属性为”minlength”,表示仅适用
于”minlength”验证规则。它将取代以上复合消息中的第二个参数
{1}.<arg1>元素的resource属性为false,表明此时key属性直接指
定文本。key属性值由变量${var:minlength}决定,此处值为7.
当”minlength”验证规则验证失败时,<arg0>和<arg1>元素将分别
取代以上复合消息中的两个参数。

8.<var>元素
<field>元素还可以包含零个或多个<var>元素。<var>元素用来向验
证规则传递参数。
<var>
<var-name>mask</var-name>
<var-value>${phone}</var-value>
</var>
phone常量的值为”^\d{8}\d*$”,它定义了一种字符模式,表示字
符串长度为8位,并且只能包含数字字符。mask验证规则能够比较
用户输入的phone字段是否和指定的字符模式匹配。
<arg>元素也可以访问<var>元素,语法为${var:var-name},例如:
<arg1 name=”minlength” key=”${var:minlength}” resource=”false”/>
<var>
<var-name>minlength</var-name>
<var-value>7</var-value>
</var>
Validator插件
为了在Struts框架中使用Validator,可以采用插件机制把Validator加入到框架中。这需要在Struts配置文件中配置ValidatorPlugIn插件,代码如下:
<plug-in className=”org.apache.struts.validator.ValidatorPlugIn”>
<set-property
propery=”pathnames”
value=”/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml”/>
</plug-in>
当应用启动时,Struts框架会加载ValidatorPlugIn插件并调用它的init()方法。init()方法根据pathnames属性,加载相应的validator-rules.xml和validation.xml文件,把验证信息读入到内存中。

Validator框架和ActionForm
Validator框架不能用于验证标准的org.apache.struts.action.ActionForm类。如果要使用Validator框架,应该采用ActionForm类的两个子类:org.apache.struts.validator.DynavalidtorForm和org.apahce.struts.validator.ValidatorForm。ActionForm类及其子类的框图如图:

DynaValidatorForm支持在动态ActionForm中使用Validator框架,ValidatorForm支持在标准ActionForm中使用Validator框架。无论是对于动态ActionForm还是标准ActionForm,配置Validator框架的方式都是一样的。
DynavalidatorForm和ValidatorForm类都实现了validate()方法,所以当创建他们的子类时,不必再覆盖validate()方法。validatorForm类的validate()方法的代码如下:

public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){
ServletContext application = getServlet().getServletContext();
ActionErrors errors = new ActionErrors();

String validationKey = getValidationKey(mapping,request);

Validator validator = Resources.initValidator(validationKey, this,application,request,error,page);
try{
   validatorResults = validator.validate();
}catch(ValidatorException e){
     log.error(e.getMessage(),e);
}
return errors;
}
以上validate()方法调用验证框架的验证方法进行验证,如果验证失败,就会创建包含错误消息的ActionMessage对象,并把该对象添加到ActionErrors集合对象中。validate()方法最后返回ActionErrors对象。
ValidatorForm有一个子类ValidatorActionForm。下图指示为这两种类的区别。









Validator框架提供这两种类的目的在于可以更加精确的控制执行验证条件。例如,
假定有个名为“editForm”的表单对应两个Action:saveAction和cancelAction,如图:






假定editForm表单包含两个验证规则:验证A和验证B。如果对于用的保存或取消动作,都要执行两个验证,则可以创建一个扩展ValidatorForm类的EditForm类,然后再validation.xml中作如下配置:

<formset>
  <form name=”editForm”>
     验证规则A
  验证规则B
</form>
…….
</formset>
如果对于用户的保存动作,仅执行验证规则A,对于取消动作,仅执行验证规则B,则可以创建一个扩展ValidatorActionForm类,然后再validation.xml中作如下配置:
<formset>
  <form name=”/save”>
验证规则A
  </form>
  <form name=”/cancel”>
验证规则B
  </form>
…..
</formset>

对于动态ActionForm,也有DynaValidatorForm和DynaValidatorActionForm之分,它们的区别于ValidationForm和ValidatorActionForm的区别一样。
分享到:
评论
1 楼 hong609021 2008-07-12  
你好:
  我想问你一个问题,进行用户名验证时,可以进行required验证,mask验证但是不能进行minlength验证,email验证也不可以,这是为什么啊?谢谢
  我的邮箱weiqiuhong2007@126.com

相关推荐

    Validator验证框架 回顾ActionForm的表单验证,掌握Validator验证框架.zip

    在.NET框架下,C#语言提供了多种方式进行表单验证,其中Validator验证框架是一个常用的选择。本教程将通过回顾ActionForm的表单验证方式,深入探讨如何有效地掌握Validator验证框架。 ActionForm是早期ASP.NET MVC...

    Struts1的validator验证框架

    ### Struts1的Validator验证框架详解 在Java Web开发领域,Struts1作为一个经典且流行的MVC框架,提供了丰富的功能来构建动态Web应用。其中,Validator框架是Struts1用于客户端和服务端表单验证的强大工具,它能...

    Validator验证框架.pdf

    ### Validator验证框架详解 #### 一、概述 Validator验证框架是一种强大的工具,它与Struts框架结合使用,用于实现Web应用程序中的数据验证功能。通过使用Validator框架,开发人员可以简化验证逻辑,提高代码的可...

    Validator验证框架

    Validator验证框架,STRUTS动态验证的规则与规范!

    Struts Validator验证框架详细讲解.txt

    ### Struts Validator 验证框架详细讲解 #### 引言 在Java Web开发中,数据验证是确保应用程序安全性和用户体验的重要环节。Struts框架作为早期流行的MVC框架之一,提供了强大的验证机制——Struts Validator,它...

    Struts的Validator验证框架使用教程

    Struts的Validator验证框架是Java Web开发中常用的一个组件,主要用于处理用户输入的数据验证。它提供了强大的、可扩展的验证规则,使得开发者可以方便地在应用程序中实施数据校验,从而保证了数据的准确性和安全性...

    掌握Validator验证框架.pptx

    掌握Validator验证框架.pptx

    基于Java语言的Fluent-Validator验证框架设计源码

    该项目是一款基于Java语言的Fluent-Validator验证框架设计源码,包含171个文件,涵盖148个Java源文件、10个属性文件、7个XML文件、2个Markdown文件、1个Git忽略文件、1个YAML文件、1个许可证文件、1个Shell脚本以及1...

    struts validator验证框架项目

    Struts Validator是一个强大的验证框架,它是Apache Struts框架的一部分,用于在Java Web应用程序中实现数据输入验证。这个项目集成了验证规则,使得开发者能够轻松地确保用户提交的数据符合预期的格式和约束,从而...

    struts1.x使用common-validator验证框架

    此外,Struts1.x的验证框架不仅限于服务器端验证,也可以结合JavaScript进行客户端验证,以提高用户体验。客户端验证可以通过在JSP页面中引入Struts的JavaScript库,然后利用`&lt;html:javascript&gt;`标签生成相应的验证...

    struts中使用validator验证框架

    Validator框架是Struts的一个重要组件,主要负责处理用户输入的数据验证,确保数据的完整性和正确性。在本文中,我们将深入探讨如何在Struts中使用Validator框架,并通过三个逐步进阶的实例来理解其工作原理。 首先...

    struts validator验证框架例子

    Struts Validator是一个强大的验证框架,它是Apache Struts项目的一部分,专为Java Web应用程序设计,用于实现数据输入验证。Struts框架本身是一个MVC(模型-视图-控制器)架构,而Validator则是它的一个核心组件,...

    Struts validator验证框架

    Struts Validator是一个强大的验证框架,它是Apache Struts框架的一部分,用于在Java Web应用程序中实现数据验证。这个框架帮助开发者在用户提交表单时确保输入的数据是合法、完整且符合业务规则的,从而提高应用...

    Struts1.3 Validator 验证框架校验Email 例子

    Struts1.3 与1.2向比验证框架部分还是有所区别的,该例子通过一个简单的Email的校验,演示如何通过Struts Validate验证框架进行在页面中生成JavaScripte脚本,进行客户端校验。下完后记得评分,资源分就会回来,还能...

    validator验证框架的简单使用(struts)

    Validator框架是Struts的一个重要组件,用于进行数据验证,确保用户提交的数据符合预设的规则。在本教程中,我们将深入探讨如何在Struts应用中简单使用Validator框架,主要关注`validator.xml`配置文件的使用。 ...

    validator独立框架验证小例子

    Apache Commons Validator就是这样一个强大的验证框架,它为Java应用程序提供了灵活且可扩展的数据验证功能。本篇文章将深入探讨Apache Commons Validator框架,并通过一个简单的小例子来演示其使用方法。 Apache ...

    jquery validator js验证框架

    **jQuery Validator JS验证框架** jQuery Validator是一个强大的JavaScript库,它为HTML表单提供了方便而灵活的验证功能。这个框架基于jQuery库,使得在网页中实现客户端验证变得简单易行。通过使用jQuery ...

    struts 的validator框架验证

    Struts的Validator框架是Java Web开发中用于处理用户输入验证的一种强大的工具,它与MVC架构中的控制器层紧密结合,提供了一种便捷的方式来确保用户提交的数据符合预设的业务规则。这个框架大大简化了数据验证的过程...

    Validator验证架框api

    `Validator`是一个强大的验证框架,广泛应用于Java开发中,它为开发者提供了丰富的验证规则和便捷的API,使得数据验证过程更加高效和规范。在本文中,我们将深入探讨`Validator`框架的基本概念、核心功能以及如何在...

Global site tag (gtag.js) - Google Analytics