struts-validate
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Validator框架结构 Validator框架主要依赖两个JAR文件,要将这两 个jar文件部署到WEB-INF/lib目录中
jakarta-oro.jar:提供了一组处理文本的类,具有文 本替换,过滤和分割等功能 Commons-validator.jar:提供了一个简单可扩展的验 证框架,包含了通用的验证方法和验证规则
Validator框架的优点
Validator框架能够克服在ActionForm Bean中以编程方式 进行数据验证的局限 允许为Struts应用灵活的配置验证规则,无需编程
Validator介绍
Validator是一个用于验证数据的有效性的开源框架,如 判断字符串是不是数字,是不是一个Mail地址,是不是 一个电话号码等等 Validator是David Winterfeldt创建的一个开源框架,它能 被集成到Struts中,负责数据验证,如今已成为Jakarta的 公司项目的一部分
Struts验证框架
上讲回顾 Dispatch类的使用
本讲主要内容 了解validator框架 了解validator-rules.xml 了解validation.xml 在Struts中使用validator框架
为什么用validator框架做数据验证
以往是在ActionFormBean的validate()方法中对用户输入 的表单数据进行验证。该验证方式存在以下问题: 必须通过程序代码实现验证逻辑,如果验证逻辑发生 变化,必须重新编写和编译程序代码 当系统中有多个ActionForm Bean,并且它们包含一 些相同的验证逻辑时,开发人员必须对每个 ActionForm Bean进行重复编程,完成相同的验证逻 辑,这就降低了代码的可重用性 由于ActionForm对应于HTTP请求表单,所以在开发 设计大型Struts应用时,随着页面和请求表单数目的 增多,Struts应用程序中需定义大量的ActionForm类
检验属性值能否被转换成对应的基本数据类型 检验输入域是否是一个合法的信用卡号码 检验输入域是否是一个合法日期 检验输入域是否是一个合法 Email地址 检验输入域是否能成功匹配一个正则表达式 检验属性值的长度是否小于等于给定的最大长度 检验属性值的长度是否大于等于给定的最小长度 检验属性值的范围是否在最大值和最小值之间 检验输入域是否不为空,或不包含空格符的长度是否大于零
msg属性的内容
默认情况下,Validator框架使用如下的消息文本:
errors.required = {0} is required. errors.minlength = {0} can not be less than {1} characters. errors.maxlength = {0} can not be greater than {1} characters. errors.invalid = {0} is invalid. errors.byte = {0} must be a byte. errors.short = {0} must be a short. errors.integer = {0} must be an integer. errors.long = {0} must be a long. errors.float = {0} must be a float. errors.double = {0} must be a double. ¡
部署验证规则及验证内容文件 将validator-rules.xml和validator.xml部署到 WEB-INF文件夹下 将对应的两个jar文件添加到WEB-INF/lib目录 下
validator-rules.xml文件
<validator name = "integer" classname = "org.apache.struts.validator.FieldChecks" method = "validateInteger" methodParams = "java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionErrors, javax.servlet.http.HttpServletRequest" depends = "" msg = "errors.EHOMO010" jsFunctionName = "IntegerValidations">
Validator框架结构 Validator框架采用两个其于XML的配置文件来 配置验证规则,这两个xml文件都要部署在 WEB-INF目录下:
validator-rules.xml:包含了一组通用的验证规则,对 所有struts应用都可以使用,struts软件包中本身提供 了这个文件,一般不需进行修改 validator.xml:针对具体的struts应用,由开发人员自 己建立,并配置对应的验证规则,实际上取代了在 ActionForm中重写validate()时所编写的验证逻辑代码
Validator组件基本验证规则
validator-rules.xml文件提供了一些默认的验证规则,具体如下:
验证规则名称 Byte,short,integer, long,float,double creditCard date email mask maxLength minLength range required 说 明
? <global>:可以Fra Baidu bibliotek现零次或多次 ? <formset>:必须出现一次或多次
<form-validation>的子元素<global>
作用:用来定义常量,方便在文件的其它地方使用该常量 子元素: <constant>:定义一个全局常量;通过<constant-name>和 <constant-value>来实现
... <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /> </plug-in> ...
把以上的内容添加到应用的Resource Bundle中。可以使 用默认的消息文本,也可以修改validator-rules.xml文件 中<validator>元素的msg属性,使它引用其他自定义的消 息key;或者修改以上的错误消息文本
validator.xml文件
<form-validation> <global> //定义常量表达式,在formset元素中可以通过 <contant> //${constant-name}的形式来引用它们 <contant-name>zipCode</contant-name> <contan-value>^\d{6}\d*$</contant-value> </contant> </global> <formset> //定义具体表单规则 <form name = " registForm"> <field property = "username" depends = "required, minlength"> <arg0 key = "label.username" /> <arg1 key = "${var:minlength}" resource="false"/> <var> <var-name>minlength</var-name> <var-value>3</var-value> </var> </field> <field property = "psw1" depends = "required"> <arg0 key = "label.password" /> </field> </form> </formset> </form-validation>
validation.xml详解
validator框架的第二个配置文件,这个文件是针对于某 个具体Struts应用,需要开发人员来创建 它可以为应用中的ActionForm配置所需的验证规则,取 代在ActionForm类中以编程的方式来实现验证逻辑,有 以下元素: <form-validation>:根元素,它包含两个子元素:
? <constant-name>:定义常量的名称 ? <constant-value>:定义常量的值
下面代码中定义了常量zipCode,在<formset>元素中可以通过 ${constant-name}的形式来引用,例如:访问zipCode常量的形式为 ${zipCode}
<global> //定义常量表达式,在formset元素中可以通过 <contant> //${constant-name}的形式来引用它们 <contant-name>zipCode</contant-name> <contan-value>^\d{6}\d*$</contant-value> </contant> </global>
validator-rules.xml文件详解
作用:包含了一组通用的验证规则,对所有的Struts应用 都适用。一般不用修改这个文件 validator-rules.xml文件的根元素为<form-validation>, 它可以包含一个或多个<global>元素;在<global>元素中 可以包含一个或多个<validator>元素 <validator>标签:定义一个唯一的验证规则
Validator框架自带的验证规则
Org.apache.commons.validator.GenericValidator类提供了一组实现 这些规则的静态方法:
方 法 isBlankOrNull isBytel isCreditCard isDate isDouble isEmail isFloat isInRange isInt: isLong isShort mathRegexp maxLength minLength 描 述 验证字段是否为null,或长度为0 验证字段是否可以被转换成有效的 byte型 验证字段是否为有效的信用卡号 验证字段是否为有交的日期 验证字段是否可以被转换成有效的 Double型 验证字段是否为有效的E-mail地址 验证字段是否可以转换成有效的Float型 验证字段是否介于最大值和最小值之间 验证字段是否可以转换成有效的 int型 验证字段是否可以转换成有效的 Long型 验证字段是否可以转换成有效的 Short型 验证字段是否与指定的正则表达式匹配 验证字段是否小于或等于最大值 验证字段是否大于或等于最小值
Validator插件
为了在struts中使用validator,可以用插件方式加载 Validator框架,需在struts-config.xml配置文件中配置 ValidatorPlugIn插件,同时写明两个xml文件的路径 应用程序启动时,Struts会加载这个插件,并调用它的 init()方法,init()方法根据pathnames加载相应的 validator-rules.xml和validator.xml文件,把验证信息读 入到内存中
name:赋予验证规则的一个唯一的名称 classname:指的是具体实现验证规则的类 method:指包含具体实现类的方法 methodParams:声明method属性所指定的方法参数,多个参数之间用逗号分隔 depends:指定在调用当前的严整规则之前必须先调用的其他验证规则。多个则用 逗号分隔 msg:指定来自于资源包中的key。当验证失败时,validator框架根据这个key到 资源包中查找匹配的消息