- 浏览: 469147 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
mrshen:
很棒,在其他大神的博客上理清了思路看懂之后,来lz这里用例子学 ...
RED-BLACK(红黑)树的实现TreeMap源码阅读 -
a939639017:
yanf4j check不下来 ?
Java nio 2.0 AIO -
hellostory:
又是抄来的 - -
mysql分表方案 -
davidluoye:
为什么不说下支持的数据库呢?
模糊查询的优化 -
oliveevilo:
表示没看懂
Synchronized和java.util.concurrent.locks.Lock的区别
Commons-Validator
博客分类: java
Apache正则表达式配置管理StrutsBean .
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文件中的一条,作为不通过验证时返回的信息"></validator></global><formset language="语言" country="城市" variant="方言?"><constant><constant-name>验证方法的标志名</constant-name><constant-value>正则表达式</constant-value></constant><form name="bean 对象名称">
<field property="bean中的属性名" depends="需要什么样的验证,可以为多个值,以逗号格开,值为方法的标志名"><arg name="变量名" key="properties文件的key,或者来自Var的name" resource="是/否来自资源文件"></arg><var>
<var-name>变量名</var-name><var-value>变量值</var-value></var>
</field>
</form>
</formset></form-validation>
Commons-Validator(二)
在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></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)。这个类通过validate(...)方法用来对这个Form中的所有位置低于page的Field进行验证。它实际是在一个循环中逐个调用每个field的validate(...)方法,然后把结果保存在一个ValidatorResults对象中。
六、org.apache.commons.validator.Field
这个类有如下属性:depends,依赖于什么验证规则。dependencyList保存了以逗号为分隔符把depends分割生成的list。page,如果是多步提交的话当前是第几步,值等于或小于表单中page性质的值,JavaBean 才会得到处理;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对象。getIndexedListProperty表明这个property为JavaBean中的一个数组元素的index。
1、process(Map globalConstants, Map constants)
这个方法用来执行配置文件中变量的替换。它的两个参数分别为在<global></global>和<formset></formset>中定义的constant。在这个Map中,key为<constant></constant>标签中的constant-name,value为<constant-value>。在配置文件中,可以实现如下的变量使用方式:Form的property属性,Var中的value属性,Arg中的key属性,Msg的key属性,他们均可以通过{constant-name}的方式,引用在<global></global>或者<formset></formset>标签中定义的constant。Arg中的key属性,可以通过{Var:var-name}的方式引用在<var></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。然后通过generateKey()方法判断当前要验证的Field是否是IndexedList。如果是,则需要分别对这个List中的各个元素进行验证;否则直接执行对与JavaBean的特定属性(property)执行验证。
3、validateForRule(...)
接受要执行的ValidatorAction对象的同时,还是会接受Map actions参数,这是因为这个要执行的ValidatorAction可能会依赖于其它的ValidatorAction。它会先查找以前的验证结果,如果以前没有执行过这个验证,那么执行runDependentValidators(...)方法,执行它所依赖于的ValidatorAction;如果通过,那么再对要执行的ValidatorAction,执行验证。
Commons-Validator(三)
在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属性,表示时候检查过渡匹配所要求的日期格式。这个日期检查就是通过formatter.parse(value)方法检查时候有异常抛出。
五、org.apache.commons.validator.EmailValidator
实现了单例模式。这个类用来检查Email类型是否合法。它通过正则表达式实现验证。
六、org.apache.commons.validator.GenericTypeValidator
这个类实现了对基本类型(Byte,Short,Int,Long,Float, Date)的检测,方法很简单,就是通过每个类型的构造函数创建相应的对象,如果抛出异常就说明不符合,否则符合。同时,这个类还提供对CreditCard验证的实现。
Commons-Validator(四)
通过调用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></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文件。由于一个js文件只包含一个方法,因此会读取所有的内容后,直接返回所读取的所有内容。
三、org.apache.commons.validator.ValidatorResults
这个类管理对一个Form中的所有Field执行验证的结果。它有如下属性:hResults,用来管理对所有Field验证的结果,它的key为field的kye属性,它的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(五)
最后,说明Validator是如何初始化的。
一、org.apache.commons.validator.ValidatorResourcesInitializer
这个类用来初始化Validator框架,通过Digester包解析用户自定义的xml配置文件。然后把解析的结果保存到ValidatorResources对象中,最后返回这个ValidatorResources对象。
二、org.apache.commons.validator.ValidatorResources
这个类用来管理Validator框架中的资源。它包含如下属性:hFormSets,一个FastHashMap,用来管理所有的FormSet,这个FastHashMap的key为根据FormSet中的本地信息生成的。hConstants,一个FastHashMap,用来管理<global></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"></set-property></plug-in>
其中validator-rules.xml,为Struts自带的配置文件,配置了所有的验证方法;而validation.xml为用户自己配置,配置要验证的对象。
四、org.apache.struts.validator.FieldChecks
这个是Struts使用的核心验证类,用来实现各种验证规则。其中,validateXXX(...)就是想要创建的方法名,只要规则名没有重复即可。validateXXX(...)方法的参数说明:
Object 验证是在此JavaBean 对象上完成的
ValidatorAction 当前所执行的ValidatorAction
Field 被验证的字段对象
ActionErrors 如果验证失败,新增ActionError 对象的错误对象
HttpServletRequest 当前的请求对象
五、org.apache.commons.validator.ValidatorResources
这个类用来通过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属性中 </constant-value></constant-name>
发表评论
-
Integer“==”和Integer“equals”
2013-09-01 12:37 1278以前有碰到Integer“==”和Integer“eq ... -
java枚举类型enum的使用
2013-08-07 09:57 8994分类: java2011-04-24 23:17 6 ... -
线上TOMCAT,JAVA参数配置
2013-06-08 11:57 1353export JAVA_HOME=/export/serve ... -
HttpUrlConnection不能设置Host
2013-06-05 18:01 2768调试了一天终于找到原因了,奶奶的!! 测试就报503错误, ... -
Java访问https接口实现
2013-03-05 22:06 4789用两种方式分别实现了,第一种是jdk原生的,代码稍微多点, ... -
深入理解HASHMAP
2013-01-06 11:48 1072Hashmap是一种非常常用的、应用广泛的数据类型,最近研究到 ... -
java concurrent 探秘
2012-08-06 16:44 896我们都知道,在JDK1.5 ... -
ReentrantLock与syncronized的不同
2012-08-06 14:22 1170ReentrantLock 一个可重入的互斥锁定 ... -
log4j 日志大小
2012-08-03 17:47 1923今天群里一个哥们问一个问题: 我想先控制每天日 ... -
Apache Commons 包含的开源的工具类介绍
2012-07-24 10:17 1262原文地址:http://blog.csdn.n ... -
JAVA工具类之Apache的Commons Lang和Beanutils
2012-07-24 10:09 1424Apache Commons包估计是Java中使用最广发的工具 ... -
批处理启动JAVA程序(多JAR包)
2012-06-16 11:01 2280JavaJVMF# . 直接给出代码吧,下面是我自己为一个端口 ... -
中高级技术人员面试
2012-08-06 14:23 1360struts,spring,hiberate知识点。实际上对于 ... -
IO深度解析
2011-11-04 15:49 1157http://www.ibm.com/developerwor ... -
线程局部存储Thread Local Storage-TLS(总结整理)
2011-10-27 18:18 1782在线程的学习中我们知道每个线程除了共享进程的资源外还拥有各 ... -
正确理解ThreadLocal
2011-10-27 18:17 892http://www.iteye.com/topic/1038 ... -
读源码的建议
2011-10-11 22:01 1377才在论坛不经意间,看到有关源码阅读的帖子。回想自己前几年,阅读 ... -
java synchronized详解
2011-09-02 13:53 921Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候 ... -
开发中的陷阱
2011-09-02 09:58 9281. 虚拟机对字符串的处理 虚拟机是将字符串直 ... -
linux wc命令
2011-09-01 16:28 1853通常利用Linux的wc命令和其他命令结合来计算行和其他信息。 ...
相关推荐
Apache Commons Validator 是一个强大的数据验证框架,主要用于Java应用程序的数据输入验证。这个工具包提供了一种标准的方法来处理各种验证规则,比如检查电子邮件地址的有效性、日期格式、电话号码格式等,极大地...
此外,Struts1.x的验证框架不仅限于服务器端验证,也可以结合JavaScript进行客户端验证,以提高用户体验。客户端验证可以通过在JSP页面中引入Struts的JavaScript库,然后利用`<html:javascript>`标签生成相应的验证...
Apache Commons-Validator 是一个强大的Java验证框架,常用于处理Web应用程序中的数据验证。它可以从Apache Commons项目中获取,是Struts 1.x框架的一部分,但也可以独立使用在其他任何需要验证逻辑的应用中。该框架...
Commons Validator是Apache Jakarta开源项目的一个子项目,专注于提供一套强大的数据验证框架,版本为1.3.1。这个压缩包包含了一系列的类和资源文件,用于帮助开发者在Java应用程序中执行各种验证规则,确保输入数据...
Apache Commons Validator的主要功能是提供一套标准的数据验证框架,它可以帮助开发者验证用户输入,确保数据的完整性和准确性。这些验证规则可以应用在Web表单、业务逻辑层等多种场景。Validator提供了多种预定义的...
2. 删除ActionForm中的validate方法,因为验证框架会自动处理验证逻辑。 **配置Struts** 1. 在`struts-config.xml`中的`<action>`标签中添加`validate="true"`属性,以启用验证,并指定错误发生时的转发地址。 2. ...
Apache Commons Validator提供了丰富的验证框架,它支持自定义验证规则,可以用来验证各种类型的数据,如电子邮件地址、电话号码、日期等。这个库包含了预定义的验证规则,同时允许开发者扩展自定义验证器,以满足...
- `Validator`:这是验证框架的核心接口,定义了验证的通用方法。 - `ValidatorFactory`:用于创建`Validator`实例,它是整个验证流程的起点。 - `FieldChecks`:包含了对单个字段的常见验证方法,如检查是否为空、...
Apache Commons Validator提供了客户端验证和服务器端数据验证的构建块。 它可以单独使用,也可以与Struts之类的框架一起使用。 文献资料 可以在上找到更多信息。 可以浏览 。 与Apache Commons Validator的使用...
《Apache Commons Validator 1.7:企业级验证框架详解》 Apache Commons Validator 是一个用于进行数据验证的开源组件,它是Apache软件基金会 Commons 项目的一部分。这个组件为Java开发者提供了一套强大而灵活的...
Apache Commons Validator 是一个用于验证数据的工具包,它在非Web环境中的应用为开发者提供了方便的数据验证功能。这个工具包最初是为了支持Struts框架而设计的,但它的用途远远超出了Web开发的范畴,可以应用于...
《Bean Validator:构建Java Bean验证框架的基石》 在Java开发中,数据验证是一个不可或缺的环节,它确保了输入的数据符合预期的格式和规则,从而防止了潜在的错误和异常。Bean Validator,作为Java Bean验证的标准...
2. **国际化支持**:由于验证消息可以针对不同的语言进行定制,所以Commons Validator 支持多语言环境。这使得应用程序可以根据用户的语言设置显示相应的错误提示。 3. **自定义验证规则**:除了内置的验证规则外,...
7. **commons-validator**: 提供了数据验证框架,可以定义验证规则并应用于对象属性,确保数据的准确性和完整性。 8. **commons-net**: 包含了各种网络协议的实现,如FTP、Telnet、SMTP等,方便进行网络通信。 9. ...
其中commons validator是一个可配置的验证框架,使用方式和工作原理都和struts用的ValidatorPlugIn一样。它可以通过配置生成js在客户端验证, 也可以配合具有验证功能的spring controller实现客户端验证. 本下载文件...
### Validator验证框架详解 #### 一、概述 Validator验证框架是一种强大的工具,它与Struts框架结合使用,用于实现Web应用程序中的数据验证功能。通过使用Validator框架,开发人员可以简化验证逻辑,提高代码的可...
另一方面,`common-validator`是Apache Commons项目的一部分,它提供了一个强大的表单验证框架,可以用于验证用户输入的数据。在Struts应用中,我们通常会创建一个ActionForm类,该类包含了用户的输入字段,并在其中...
`common-validator`是一款专为JavaScript设计的轻量级验证框架,旨在简化和增强网页表单数据的验证功能。这款工具以其灵活性和易用性著称,能够帮助开发者快速构建健壮的验证规则,提升用户体验。 ### 主要特性 1....
### Struts Validator 验证框架详细讲解 #### 引言 在Java Web开发中,数据验证是确保应用程序安全性和用户体验的重要环节。Struts框架作为早期流行的MVC框架之一,提供了强大的验证机制——Struts Validator,它...
"bean-validator"是一个在SpringMVC框架中进行数据验证的重要工具。它主要基于JSR-303(Java Bean Validation)标准,为JavaBeans提供了一种声明式验证的方法,极大地简化了应用程序中的验证逻辑。在SpringMVC中,...