`

commons validator 1.1 框架解析

阅读更多

原文:http://blog.sina.com.cn/s/blog_4abc544f0100m1oa.html

 

但文中有不少分析错误之处,且没有说明针对的commons validator包的版本,特此修订如下文:

 

for version 1.1

Commons-Validator(一) (2005-09-12 18:05:00)转载▼

标签: 杂谈

    Commons-Validator包用来把验证规则程序提取出来,以供重复使用。这个包可以使用在Struts中,也可以独立的应用在任何其它的应用中。用户可以通过java类的方式自定义验证方法,也可以在配置文件中通过正则表达式配置验证方法。它不但支持服务器端的验证,客户端的验证也支持,具体需要使用tag把相应的js方法写入相应的页面中。

 

一、综述:

    整个Validator框架可以有若干个FormSet,而每个FormSet又可以有若干个Form,每个Form中可以有若干个Field。FormSet的process(...)方法,逐个调用其中的Form的process(...)方法,而Form的process(...)方法又是逐个调用Field的process(...)方法。Validator类作为验证的起始点,调用与其一一对应的Form的validate(...)方法,而Form的validate(...)方法又是逐个调用其中Field的validate(...)方法实现的。

 

二、配置文件说明:

<form-validation>

   <global>

      <constant>

        <constant-name>验证方法的标志名</constant-name>

        <constant-value>正则表达式</constant-value>

      </constant>

      <validator name="这个验证方法的标志名,供下面的depends调用"

                 classname="这个验证方法在哪个类中,为类全名"

                 method="验证方法的名称"

                 methodParams="这个验证方法需要的参数类型,依次以逗号格开,为类全名"

                 depends="基于什么验证之上,可以为多个值,以逗号格开,值为方法的标志名"

                 jsFunction="js的方法全名,格式为文件路径.方法名。文件路径以点隔开,

                             如果不填,默认为org.apache.commons.validator.javascript.xxxx"

                 msg="对应于properties文件中的一条,作为不通过验证时返回的信息"/>

   </global>

   <formset language="语言" country="城市" variant="语言的变种,方言">

      <constant>

 

Commons-Validator(二) (2005-09-12 18:11:00)转载▼

标签: 杂谈

    在Validator的配置文件中,一共有如下几个基本元素。

 

一、org.apache.commons.validator.Var

    它的作用是为配置文件(validator.xml)中的其它标签提供可取用的变量,为Field提供执行验证所需要的其它参数值,比如最大长度。这个类有如下属性:name,变量的名称;value,变量的值;jsType,当要自动生成js的时候,js的类型。

 

二、org.apache.commons.validator.Arg

    它的作用是替换信息中的某一部分。这个类有如下属性:bundle,资源文件名,用来存放所需要的信息。key,表示Arg的key或者value。name,表示Arg的名称。position,这个Arg中的值用来替换信息中的哪一部分,需要替换的部分以{n}标志。resource:key所指定的信息是否来自外部的资源文件,默认为true;如果为true,则代表key为buddle属性所指定的资源文件中的key。

 

三、org.apache.commons.validator.Msg

    它的作用是在验证不通过时,应该返回什么的信息。这个类有如下属性:bundle,资源文件名,用来存放所需要的信息。key,表示Msg的key或者value。name,表示Msg的名称。resource:key所指定的信息是否来自外部的资源文件,默认为true;如果为true,则代表key为buddle属性所指定的资源文件中的key。

 

四、org.apache.commons.validator.FormSet

    这个类管理通过一个Map所有要检验的Form对象,key为Form的name;同时通过一个Map管理在<formset/>中定义的Constant,key为<constant-name>。同时其内部有language,country, variant这几个属性,用来实现国际化。一个配置文件可以有多个FormSet,这些FormSet的区别是要求不同的本地化。

 

五、org.apache.commons.validator.Form

    这个类有如下属性:name,这个form的名称。lFields,一个保存所有Field的List。hFields,一个保存所有Field的FastHashMap,这个FastHashMap的key值是对应Field的key属性(对应配置文件中的property,或者indexedListProperty + "[]" + "." + property)。这个类通过validate(...)方法用来对这个Form中的所有位置小于或等于page的Field进行验证。它实际是在一个循环中逐个调用每个field的validate(...)方法,然后把结果保存在一个ValidatorResults对象中。

 

六、org.apache.commons.validator.Field

    这个类有如下属性:depends,依赖于什么验证规则。dependencyList保存了以逗号为分隔符把depends分割生成的list。page,当前Field属于多步提交的哪个步骤页面;args,是一个数组;这个数组的元素为HashMap,每个HashMap在数组的位置就是其中的Arg中的position属性的值;HashMap中的key值为Arg的name,如果这个name为null则为默认的值:DEFAULT_ARG(org.apache.commons.validator.Field.DEFAULT),value为Arg对象。hVars,是一个FastHashMap,用来管理所有的Var对象,key为Var的name,值为Var对象。indexedListProperty表明这个property的值为一个Collection或一个数组。

1、process(Map globalConstants, Map constants)

    这个方法用来执行配置文件中变量的替换。它的两个参数分别为在<global/>和<formset/>中定义的constant。在这个Map中,key为<constant/>标签中的constant-name,value为<constant-value>。在配置文件中,可以实现如下的变量使用方式:Field的property属性,Var中的value属性,Arg中的key属性,Msg的key属性,他们均可以通过{constant-name}的方式,引用在<global/>或者<formset/>标签中定义的constant。Arg中的key属性,可以通过{Var:var-name}的方式引用在<var/>中定义的Var。

    FormSet中的process(...)方法依次调用其中的Form的process(...)方法,而Form的process(...)方法又依次调用其中的Field的process(...)方法。

2、validate(Map params, Map actions)

    执行验证,其中actions保存了所有的ValidatorAction对象。它首先会从params取出key为Validator.BEAN_PARAM(java.lang.Object)的值作为要验证的JavaBean。然后通过isIndexed()方法判断当前要验证的Field是否是IndexedList。如果是,则需要分别对这个List中的各个元素进行验证;否则直接执行对该JavaBean的特定属性(property)的验证。

3、validateForRule(...)

    接受要执行的ValidatorAction对象的同时,还是会接受Map actions参数,这是因为这个要执行的ValidatorAction可能会依赖于其它的ValidatorAction。它会先查找以前的验证结果,如果以前没有执行过这个验证,那么执行runDependentValidators(...)方法,执行它所依赖于的ValidatorAction;如果通过,那么再对要执行的ValidatorAction,执行验证。

 

Commons-Validator(三) (2005-09-12 18:15:00)转载▼

标签: 杂谈

    在Validator包中提供了一些Util类,同时提供了对基本数据类型,时间,E-mail,信用卡等格式的验证方法。

 

一、org.apache.commons.validator.util.Flags

    这个类用来管理一系列的Flag,其中的每个Flag的值都是2的N次方。然后每个Flag之间位或(|)就得到了整个Flags的值。

 

二、org.apache.commons.validator.util.ValidatorUtils

    这个类为Validator提供一些Utility的操作,共有三个方法。

1、replace(...)

    这个方法用来将一个字符串中某个特性的字符串替换为另一个字符串,注意这是一个全局替换方法。

2、getValueAsString(...)

    这个方法用来获取某个Bean中的一个特定的属性,然后把属性值转换为字符串返回。注意,String[]和Collection类型的值,如果里面不包含任何值,则直接返回""。

3、copyFastHashMap(...)

    很显然的是对一个特定的FashHashMap执行copy。这里要注意的是,如果value为Msg,Arg,Var类型的时候需要执行clone,然后再保存。

 

三、org.apache.commons.validator.ValidatorUtil

    这个类完全通过调用上面的ValidatorUtils方法,实现自己的同名方法。只是多了一个getDelimitedRegExp(...)方法,用来生成一个正则表达式。

 

四、org.apache.commons.validator.DateValidator

    实现了单例模式。这个类用来检查日期类型是否合法,日期的类型要通过参数传递给这个Validator。同时还有一个strict属性,表示传进来的日期字符串的长度是否要完全等于日期pattern的长度。这个日期检查就是通过调用formatter.parse(value)方法检查是否有异常抛出。

 

五、org.apache.commons.validator.EmailValidator

    实现了单例模式。这个类用来检查Email类型是否合法。它通过正则表达式实现验证。

 

六、org.apache.commons.validator.GenericTypeValidator

    这个类实现了对基本类型(Byte,Short,Int,Long,Float, Date)的检测,方法很简单,就是通过每个类型的构造函数创建相应的对象,如果抛出异常就说明不符合,否则符合。同时,这个类还提供对CreditCard验证的实现。

 

Commons-Validator(四) (2005-09-12 18:21:00)转载▼

标签: 杂谈

    通过调用Validator的validate(...)方法,启动验证。

 

一、org.apache.commons.validator.Validator

    这个类是对一个Form执行验证的起点,通过调用这个类的validate(...)方法,启动验证。这个类中的formName属性,对应于Form中的name属性。resources属性,记录这个Validator属于哪一个ValidatorResources。parameters用来管理执行validateXXX(...)方法时所需要的参数,它是一个Map,key为类全名,value为这个类全名所指的类的一个对象。注意,这个parameters是这个Form中所有Field所要执行的所有validateXXX(...)方法时所需要的参数集合。每个validateXXX(...)方法,根据自己需要的参数名(类全名),从这个parameters中查取自己所需要的参数。

 

二、org.apache.commons.validator.ValidatorAction

    每个ValidatorAction对应于配置文件中的一个<validator/>。它有如下属性:name,这个验证动作的标志名,用在depends属性的配置中。classname,这个验证方法在哪个类中,为类全名。validationClass,由classname生成的Class。method,这个验证方法的名称。validationMethod,由method生成的Method。methodParams,执行这个验证方法所需要的参数,值为逗号隔开的类全名,默认值为Validator.BEAN_PARAM,Validator.VALIDATOR_ACTION_PARAM,Validator.FIELD_PARAM。parameterClasses,由methodParams生成的Class数组。depends,依赖何ValidatorAction之上。msg,如果没有通过此验证,应该返回什么消息。javascript,为对应的javascript方法的代码内容。jsFunction,为对应的js文件名称。jsFunctionName,对应的js中方法的名称。

1、executeValidationMethod(...)

    这个方法用于对Field中的值进行检测。它实际上就是通过反射,根据类名、方法名和参数类型执行相应的验证方法。要注意的是,如果这个Field为indexList类型的,则需要把Java Bean替换为对应的Array中pos指定的元素。同时Field的key属性中的[]要变为[pos]。

2、这个类还提供了对js的基本操作,解释如下:

*generateJsFunction()

    用来生成名为org.apache.commons.validator.javascript.validateXxxx的js文件名。其中Xxxx与name相对应。

*readJavascriptFile(...)

    用来读取js文件。会在读取所有的内容后,直接返回所读取的所有内容。

 

三、org.apache.commons.validator.ValidatorResults

    这个类管理对一个Form中的所有Field执行验证的结果。它有如下属性:hResults,用来管理对所有Field验证的结果,它的key为field的key属性,它的value为ValidatorResult对象。

 

四、org.apache.commons.validator.ValidatorResult

    这个类用来管理对一个Field执行验证的时候,所有的验证方法的结果。它有如下属性:field,所要验证的Field对象。hAction,用来保存所有验证结果的Map,它的key为ValidatorAction中的name属性,value为ResultStatus对象。

 

五、org.apache.commons.validator.ResultStatus

    它封装了对某个Field执行某个验证后的结果。它有如下属性:valid,表示是否通过验证。result:为执行验证后的结果。

 

Commons-Validator(五) (2005-09-12 18:29:00)转载▼

标签: 杂谈

    最后,说明Validator是如何初始化的。

一、org.apache.commons.validator.ValidatorResourcesInitializer

    这个类用来初始化Validator框架,通过Digester包解析用户自定义的xml配置文件。然后把解析的结果保存到ValidatorResources对象中,最后返回这个ValidatorResources对象。(1.1中已经deprecated)

 

二、org.apache.commons.validator.ValidatorResources

    这个类用来管理Validator框架中的资源。它包含如下属性:hFormSets,一个FastHashMap,用来管理所有的FormSet,这个FastHashMap的key为根据FormSet中的Locale信息生成的。hConstants,一个FastHashMap,用来管理<global/>中定义的constant。hActions,一个FastHashMap,用来管理ValidatorAction,它的key为ValidatorAction的name属性。

 

三、与struts整合时需要增加的配置:

    在struts-config.xml文件中加入:

    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">

        <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />

    </plug-in>

    其中validator-rules.xml,为Struts自带的配置文件,配置了所有的验证方法;而validation.xml为用户自己配置,配置要验证的对象。

 

四、org.apache.struts.validator.FieldChecks

    这个是Struts使用的核心验证类,用来实现各种验证规则。其中,validateXXX(...)就是想要创建的方法名,只要规则名没有重复即可。validateXXX(...)方法的参数说明:

    Object             验证是在此JavaBean 对象上完成的

    ValidatorAction    当前所执行的ValidatorAction

    Field              被验证的字段对象

    ActionErrors       如果验证失败,新增ActionMessage对象至这个errors对象中

    HttpServletRequest 当前的请求对象

 

五、org.apache.struts.util.MessageResources

    这个类用来通过Arg替换Msg中格式为{N}的字符串

 

六、org.apache.commons.validator.ValidatorPlugIn

    这个类用来初始化Validator,然后把初始化生成的ValidatorResources对象保存到ServletContext中,key为VALIDATOR_KEY + config.getPrefix()。

 

七、org.apache.struts.validator.Resources

    这个类用来初始化一个Validator对象,它首先通过key值VALIDATOR_KEY + config.getPrefix()从ServletContext取得相应的ValidatorResources对象。它再以这个对象为参数构造一个Validator对象,然后把验证方法需要的参数保存到Validator对象的parameters属性中。

 

 

分享到:
评论

相关推荐

    strut2.11的validator框架

    这些依赖包通常已经包含在Struts1.1发行包中,只需要将`commons-validator.jar`和`jakarta-oro.jar`文件放置在Web应用程序的`WEB-INF/lib`目录下即可。 #### 配置验证规则 Validator框架通过两个主要的XML配置文件...

    apache commons一系列的jar包

    6. **commons-validator-1.3.0.jar**:提供了数据验证框架,能够定义和执行复杂的验证规则,通常用于表单数据验证,确保输入的有效性和一致性。 7. **commons-beanutils-1.6.jar**:提供了一组工具类来简化Java ...

    Struts Validator验证器使用指南

    自0.5版以来,Struts Validator就已集成在Struts中,起初作为开发人员包的一部分,随后其核心代码迁移到Jakarta Commons库和Struts特别扩展中,成为Struts 1.1的一个关键特性。由于其易用性和强大的功能,许多开发者...

    struts-2.0.12

    8. `commons-validator-1.3.0.jar`:Apache Commons Validator提供了数据验证的功能,Struts2可以利用它来验证用户输入。 9. `commons-beanutils-1.6.jar`:Apache Commons BeanUtils库简化了JavaBean对象的属性...

    struts2.0.11 jar 包

    - `commons-validator-1.3.0.jar`:Apache Commons Validator提供了一套验证规则,可以方便地对用户输入进行校验,确保数据的正确性。 7. **BeanUtils工具库**: - `commons-beanutils-1.6.jar`:Apache Commons ...

    SSH整合类库分析spring3.0.4+hibernate3.5.5+struts2.2.1

    10. `commons-validator.jar`:提供了校验框架,用于表单验证。 11. `ezmorph.jar`:对象转换库,用于数据类型的转换。 12. `dwr.jar`:直接Web远程调用框架,支持AJAX远程调用。 这些Jar包的组合使用,使得SSH框架...

    velocity语法 velovity包

    9. **commons-validator-1.3.1.jar**:Apache Commons Validator用于数据验证,可能与Velocity模板中的表单验证有关。 这些库共同构建了Velocity运行的环境,使得开发者能够在Java应用中灵活地使用Velocity模板语言...

    s2sh整合中jar包作用介绍

    9. classworlds-1.1.jar:类加载器框架,用于Maven等构建工具。 10. commons-beanutils-1.8.0.jar:提供JavaBean属性的获取和设置的便捷方法。 11. commons-chain-1.2.jar:Apache Commons Chain库,实现命令模式和...

    javaweb 项目中常用的jar包详解.doc

    18. Commons-validator.jar:用于处理表单验证,如在Struts框架中,通过validate函数验证用户输入,添加错误信息。 19. Dom4j.jar:是一个强大的XML处理库,提供了高性能和易于使用的API来读写XML文件。 20. ...

    常用的jar包简单介绍

    12. **commons-validator.jar**: 提供了一个验证框架,用于验证输入数据是否符合指定的规则,常用于表单验证。 13. **dom4j-1.6.1.jar**: 一个强大的XML处理库,可以解析、创建和操作XML文档。 14. **ecside_2.0_...

    struts-1.3.8-lib(new)

    14. **commons-validator.jar**:提供了表单验证的工具。 这次更新将jstl和standard库升级至1.1版本,可能意味着Struts与这些库之间的兼容性得到了优化,或者是为了适应新的开发环境或解决已知问题。开发者需要确保...

    整合SSH必备的包

    此外,还有可能需要一些其他的库,如日志库(log4j、slf4j)、数据库驱动(如mysql-connector-java.jar)、servlet-api.jar(如果你的应用运行在非Tomcat服务器上)以及一些支持性库,如commons-lang3.jar、commons-...

    Struts实践入门(原创)

    - **XML Parser**:支持 JAXP 1.1 的 XML 解析器,推荐使用 jaxp-ri (http://java.sun.com/xml) 或 Xerces (http://xml.apache.org/xerces-j)。 - **Ant Build System**:版本 1.4 或更高版本 ...

    struts安装

    - 其他依赖的 Jakarta Commons 包,包括 BeanUtils、Collections、DBCP、Logging、Pool、Services 和 Validator,以及 Digester 和 Xalan XSLT 处理器。 3. **从源代码构建 Struts** - 在 Windows 2000 操作系统...

    ssh(struts2.3.4+spring3.2+hibernate4.1.1)整合中jar包作用介绍

    - `hibernate-validator`: 验证支持。 - `hibernate-c3p0`: 连接池支持。 通过以上的详细介绍,我们可以看出,在SSH框架整合过程中,各个JAR包都发挥着至关重要的作用。开发者在实际应用时需确保所有依赖包都正确...

    Struts1.xpdf文件

    - `commons-validator-1.3.1.jar`: 验证工具。 - `oro-2.0.8.jar`: 正则表达式支持。 - `struts-core-1.3.8.jar`: Struts核心库。 - `struts-taglib-1.3.8.jar`: Struts标签库。 - `struts-tiles-1.3.8.jar`: Struts...

    Spring-Reference_zh_CN(Spring中文参考手册)

    5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 5.4.2.1. 注册用户自定义的PropertyEditor ...

Global site tag (gtag.js) - Google Analytics