Validator验证框架

系统分析

在设计Validator验证框架时,需要明确以下问题。

(1)当用户没有输入数据时,弹出英文提示信息。

(2)当用户输入的数据长度大于系统设置的数据长度,弹出英文提示信息。

(3)当用户输入的账号或密码不正确,弹出英文提示信息。

1.2 工作流程图
Validator验证框架系统流程如图1所示。

技术要点分析

1.1 技术要点
Validator验证框架在Struts应用中得到了广泛的运用,Validator验证框架主要依赖两个Jar文件。
q jakarta-oro.jar:该文件主要提供了一些文本类、具有文本替换、过滤和分割等功能。
q commons-validator.jar:该文件提供了一个简单、可扩展的验证框架,包括了通用的验证方法和规则。
在Struts中,这两个Jar文件添加到应用WEB-INF/lib目录中。
Validator框架采用两个基于XML的配置文件来配置验证规则。这两个文件为validator-rule.xml和validation.xml。在Struts中,它们均存放在WEB-INF文件夹下。

1.2 validator-rules.xml文件
validator-rules.xml文件包括了一组通用的验证规则,对所有的Struts都适用。一般情况下,没有必要修改该文件,除非需要修改或扩展默认的规则。
说明:如果想扩展默认的验证规则,最好把自定义的规则放在另一个XML文件中,而不是直接添加到validator-rules.xml文件中,这样,当升级Validator框架的版本时,不需要修改validator-rules.xml文件。
在validator-rules.xml文件中,每个<validator>元素定义了一个唯一的验证规则。例如,以下代码定义了一个名为“required”的验证规则。

<validator name="required"
classname="org.apache.struts.validator.FieldChecks"
method="validateRequired"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionMessages,
javax.servlet.http.HttpServletRequest"
msg="errors.required"/>

(1)name属性
name属性指定验证规则的逻辑名,这个名字必须是唯一的。
(2)classname和method属性
classname和method属性分别指定实现验证规则逻辑的类和方法。
(3)msg属性
msg属性制定来自于资源文件中的消息key。当验证失败时,Validator框架将根据这个消息key到资源文件中查找匹配的消息文本。
(4)depends属性
depends属性制定在调用当前验证规则之前必须先调用的其他验证规则。例如以下“maxlength”验证规则的配置代码中使用了depends属性。

<validator name="maxlength"
classname="org.apache.struts.validator.FieldChecks"
method="validateMaxLength"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionMessages,
javax.servlet.http.HttpServletRequest"
depends="required"
msg="errors.maxlength"
jsFunction="org.apache.commons.validator.javascript.validateMaxLength"/>

以上代码表明,在调用“maxlength”验证规则之前,先调用“required”规则。如果depends属性包含多个验证规则,则用逗号隔开,例如:
depends="required,integer"
如果调用depends属性指定的验证规则验证失败,就不会再调用下一个规则。

1.3 valiation.xml文件
Validator框架的另一个配置文件为valiation.xml文件,这个文件用于声明Form Bean应该采用的验证例程,取代在ActionForm类中编程的方式来实现验证逻辑。下面将介绍valiation.xml文件中的元素。
(1)<form-validation>元素
<form-validation>元素是Validator配置文件的根元素,它包含两个子元素:<global>和<formset>元素。<global>元素可以出现0次或者多次,而<formset>元素可以出现一次或者多次。
(2)<global>元素
在<global>元素中可以定义<constant>子元素,它用来定义常量表达式,在文件的其余地方可以应用这些常量表达式。
(3)<formset>元素
<formset>元素包含两个子元素:<constant>和<form>。<constant>可以出现0次或者多次,<form>元素可以出现一次或者多次。

(4)<form>元素
<formset>元素的<form>子元素用于为表单配置验证规则,它的name属性指定了表单的名字。<form>元素可以包含一个或者多个<field>子元素。
(5)<field>元素
<form>元素的<field>子元素用于配置表单中的字段的验证规则。
(6)<msg>元素
<field>元素的<msg>子元素指定验证规则对应的消息文本。
(7)<arg>元素
<field>元素可以包括4个附加的子元素:<arg0>、<arg1>、<arg2>以及<arg3>,用户替换复合消息中的参数。<arg0>元素指定第一个替换值,<arg1>元素指定第二个替换值,依次类推。

(8)<var>元素

<field>元素还可以包含0个或者多个<var>元素。<var>元素用来向验证规则传递参数。

运行结果

Validator验证框架的更多相关文章

  1. Hibernate Validator验证框架中@NotEmpty、@NotBlank、@NotNull 的区别

    Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull的主要使用情况 @NotEmpty  用在集合类上面 @NotBlank   用在String上 ...

  2. spring MVC 使用 hibernate validator验证框架,国际化配置

    spring mvc使用hibernate validator框架可以实现的功能: 1. 注解java bean声明校验规则. 2. 添加message错误信息源实现国际化配置. 3. 结合sprin ...

  3. 学习Validator验证框架总结

    在项目开发中许多地方需要加以验证,对于使用if-else简单粗暴一个一个验证,spring的validation封装了Javax ValidationI校验参数,大大缩减了代码量. 以前的分层验证,从 ...

  4. SAR-303 xml validator验证框架

    // 配置文件详解 <mvc:annotation-driven validator="validator" /> <bean id="validato ...

  5. hibernate validate验证框架中@NotEmpty、@NotbBank、@NotNull的区别

    Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull 的区别 Hibernate Validator验证框架中@NotEmpty.@NotBlank ...

  6. jQuery Validate验证框架详解

    转自:http://www.cnblogs.com/linjiqin/p/3431835.html jQuery校验官网地址:http://bassistance.de/jquery-plugins/ ...

  7. strus2验证框架

    为什么要用验证框架? 当验证规划比较复杂时,Action类的代码江边的非常繁琐,假如我们要对电话号码进行验证,是非常麻烦的. 验证框架的优点 Struts2中内置了一个验证框架,将常用的验证规则进行了 ...

  8. 【积累】validate验证框架的使用

    validate验证框架的使用:用验证框架可以很方便的验证前端页面输入的内容可以自定义验证方法 内容:0:环境搭建 1:基础用法 2:自定义用法 0:基本环境的搭建 0.1:下载js文件 0.2:引入 ...

  9. Struts2验证框架实例

    今天写了个Struts验证框架的实例,总算把验证框架弄清楚了. 上一篇Struts实例的action没有继承ActionSupport类,虽然也可以实现action的功能,但是却不能应用Struts提 ...

随机推荐

  1. dml并行

    Enabling Parallel DMLA DML statement can be parallelized only if you have explicitly enabled paralle ...

  2. 我的redis入门之路

    1:操作环境:vmware12 , centOs7 ,redis5.0.3 centOs7安装与下载链接(原文地址): https://blog.csdn.net/qq_42570879/articl ...

  3. html 文字少则居中多则居左

    <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="index ...

  4. 使用SecureCRT做端口转发

    我的笔记本只能访问跳板机,跳板机是Linux系统,访问内网机器需要在跳板机内通过ssh命令访问,特别不方便,而且我们还需要访问Windows或web网站. 这是我们就可以做一个端口转发,通过自己的笔记 ...

  5. JAVA This的简单运用

    package Code426;/*当方法的局部变量和类的成员变量重名时,根据“就近原则”,优先使用局部变量如果需要访问本类当中的成员变量,需要使用 this.成员变量 通过谁调用的方法,谁就是thi ...

  6. 设置mysql数据库为只读

    设置命令: mysql> set global read_only=1;    #1是只读,0是读写 mysql> show global variables like "%re ...

  7. openstack虚拟机rescue模式

    nova rescue vm_instance es.ops 20190426 linux虚拟机在出现类似kernel panic后,根据panic信息以及故障前的操作,定位问题的发生点,进行修复 n ...

  8. 异步简析之BlockingCollection实现生产消费模式

    目前市面上有诸多的产品实现队列功能,比如Redis.MemCache等... 其实c#中也有一个基础的集合类专门用来实现生产/消费模式 (生产模式还是建议使用Redis等产品) 下面是官方的一些资料和 ...

  9. 我的Python笔记02

    声明:本文整理借鉴金角大王的Python之路,Day2 - Python基础2,仅供本人学习使用!!! 本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表. ...

  10. js,JQ 图片转换base64 base64转换为file对象,blob对象

    //将图片转换为Base64 function getImgToBase64(url,callback){ var canvas = document.createElement('canvas'), ...