今天学习了Validator。前几次课学习了ActionForm 里面有一个方法是 validate();此方法可以在里面进行写验证代码。但是缺点就是如果我有很多ActionForm那岂不是要写死人。所以动态form(DynaActionForm)就出现了.但是要基于动态form验证。就有些麻烦了。
Validator由David Winterfeldt 创建,它能比内集成到Struts框架中。主要负责数据的验证。其实验证代码不用写。就是配置多。
先聊聊使用Validator的好处。
1 可以在一处为程序定义一套完整的验证规则;
2 如果要修改或者定义新验证比较简单。
3 支持国际化
4 支持正则表达式
5 可以应用于WEB程序也可以英语于JAVA应用程序;
6 还有就是validator支持可插性(plugbability)
验证框架 validatorFrameWordk
原理 是把一些常用的验证规则 (validator-rules.xml) 固定下来
通过 XML文件(validation.xml)的配置 来指定哪个ActioniForm的 哪个属性 使用什么样的验证规则
步骤:
1 配置struts-config.xml 文件 让struts框架能够识别出验证框架
2 创建动态Form 换成 DynaValidatorForm 类 因为该类才会使用验证框架做验证
3 编写 validation.xml 文件 配置自己的验证规则
下来就行是我的作业:
还是很简单的验证。字段 用户名、密码 、年龄、邮箱
然后对这几个字段进行验证。
首先配置struts-config.xml 让struts认识你的框架
2 创建动态form
注意org.apache.struts.validator.DynaValidatorForm
3 在WEB-INF下面创建3 validation.xml
validator-rules.xml文件
validator-rules.xml文件定义应用程序可以使用的Validator。validator-rules.xml充当模板的作用,定义所有应用程序可能要用到的Validator。
下来解释一下里面的元素
validator默认有14中规则。这写规则被称为validator框架的基本规则
名称 | 描述 |
byte,short,integer,long,float,double | 检验值是否能被转换成对应的基本数据类型 |
creditCard | 检验输入域是否是一个合法的信用卡号码 |
date | 检验输入域是否是一个合法日期 |
检验输入是否是一个合法Email地址 | |
mask | 检验输入域是否能成功匹配一个正则表达式 |
maxLength | 检验值的长度是否小于等于给定的最大长度 |
minLength | 检验值的长度是否大于等于给定的最小长度 |
range | 检验值的范围是否在最大值和最小值之间 |
required | 检验输入域是否为不为空,或不包含空格值的长度是否大于零 |
1 formset
有属性 language和country
有元素constant 和form
2 form
有属性 name 这个name要和你的dynaVdlidtorForm名字相同
有元素 field
3 field
有属性 depends 这里面的值要对应“validator-rules.xml文件 ”的基本规则名
property对应表单dynaVdlidtorForm里面属性的名字
有元素 arg msg
4 arg
有属性 name 对应 depends key对应的是消息文本也就是资源文件里面的键
resource 意思是是否从资源文件里面找这个对应的key
position 对应资源文件里面得序列值
5 msg
有属性 name 对应 depends key对应的是消息文本也就是资源文件里面的键
有属性 name 对应 depends key对应的是消息文本也就是资源文件里面的键
resource默认为true
position 对应资源文件里面得序列值
6 var
里面有两个元素 一个是 var-name var-value 设置参数的值。或者规则表达式
框架客户端验证(javascript)页面
- <html:javascript formName="registForm"/>
- <html:form action="regist.do" οnsubmit="return validateRegistForm(this)">
但是郁闷的是页面天出
都是英文提示。很显然。在资源文件里面消息提示都是英文。那么要用国际化讲这些消息转化为utf-8
用到JDK自带的转码工具 native2ascii.exe 然后打开它输入你要提示的中文 转码后
- errors.required={0} /u4e0d/u80fd/u4e3a/u7a7a
- errors.minlength={0} /u4e0d/u80fd/u5c11/u4e8e {1} /u4e2a/u5b57/u7b26
但是要一个一个进行转码很麻烦 。当然可以尝试第二种将整个资源文件全部转码 具体是这样的
- errors.maxlength={0} /u4e0d/u80fd/u5927/u4e8e {1} /u4e2a/u5b57/u7b26
- errors.invalid={0} /u662f/u975e/u6cd5/u7684
- errors.validwhen={0} /u4e0e {1} /u4e0d/u5339/u914d
- errors.date={0} /u4e0d/u7b26/u5408/u65e5/u671f/u683c/u5f0f
- errors.email={0} /u4e0d/u662f/u5408/u6cd5/u7684/u7535/u5b50/u90ae/u7bb1
- emp.username=/u7528/u6237/u540d
- emp.password=/u5bc6/u7801
- emp.repassword=/u786e/u8ba4/u5bc6/u7801
- emp.birthday=/u51fa/u751f/u65e5/u671f
- emp.email=/u7535/u5b50/u90ae/u7bb1
- emp.mobile=/u624b/u673a/u53f7
结束了。交作业。