要在
Struts
项目中使用
Validator
功能
,
首先需要配置
Struts
项目
,
使其支持
Validator
框架
.Struts
通过一个插件
(Plugin)
来使
Struts
项目支持
Validator
.
这个
Plugin
由
Struts
默认提供
,
用户也可以自己开发自己的
Validator
Plugin.Struts
默认提供的
Plugin
为
:
org.apache.struts.validator.ValidatorPlugIn
.
用户必须在
struts-config.xml
文件中配置这个
Plugin
,
才能使
Struts
项目支持
Validator
.
配置方法比较简单
,
通过任何文本编辑器打开
struts-config.xml
文件
,
在这个文件的末尾加上下面的代码
,
重新启动
J2EE
服务器就可以实现对
Validator
的支持了
.
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>
|
在
Jbuilder
开发环境中可以通过下面的方法使
Struts
项目支持
Validator
框架
.
1.
在项目管理器中用鼠标右键点击
Web
项目
(
在我们的项目中是
WebModule ).
2.
选择菜单的
“Properties…”
菜单项
.
3.
在弹出的对话框的左边树型结构中选中
“web”
节点
.
4.
在右边的
“JSP/Servlet frameworks”
框中勾选
“sturts1.1”
节点以及
“struts”
节点下的
“validation”
子节点
.
5.
点击
“OK”
按钮完成配置
.
6.
检查
struts-config.xml
文件
,
可以看到配置文件里已经加入了
Validator
Plugin.
Validator-rules.xml
文件
Validator-rules.xml
文件是校验器的定义文件
.
指定了每一个校验器的基本信息和执行校验的
JavaScript
代码
.Struts
默认提供了十四个校验器
,
这些校验器可以满足我们平时项目开发中碰到的绝大多数的输入校验要求
.
如果这些校验器不能满足用户的校验要求
,
那么我们也可以开发自己的校验器
.
我们项目主就实现了一个校验密码的一致性的
Validator
.
Struts
提供的校验器包括
Required Validator ,RequiredifValidator, MinLengthValidator , MaxLengthValidator , Mask Validator , Byte Validator , Short Validaotr , Integer Validator , Long Validator , Float Validator , Double Validator , Date Validator , Range Validator , IntRangeValidator , FloatRangeValidator , CrediteCardValidator , Email Validator
等校验器
.
后面我
将讲述一些比较常用的校验器的使用方法
.
Validator.xml
文件
Validator.xml
文件用来定义用户需要校验的每一个
JSP Form
中的每一个字段的校验规则
,
这个文件是我们在
Struts
项目开发中使用
Validator
框架所需要配置的文件
.
这个文件的根节点是
<form-validator>,
在根节点下的
<formset>
节点的
<form>
子节点就对应了我们在开发
JSP
文件是所定义的
Form
标记
,
也对应这
struts-config.xml
中的
form bean
的定义
.
一个
<form>
节点由多个
<field>
节点组成
,
每个
<field>
节点的结构大概如下
:
<field property="password" depends="required,minlength,twofields">
<msg name="required" key="test.required"/>
<msg name="minlength" key="test.minlength"/>
<msg name="twofields" key="test.twofields"/>
<arg0 key="test.password" />
<arg1 name="minlength" key="${var:minlength}" resource="false" />
<var>
<var-name>minlength</var-name>
<var-value>8</var-value>
</var>
<var>
<var-name>secondProperty</var-name>
<var-value>password2</var-value>
</var>
</field>
|
其中一个
<Field>
对应于一个
Form Bean
的一个
Field,<Field>
标记的
property
属性说明了这个
Field
对应的
Form Bean
的
Field
名称
,
这个名称要跟
struts-config.xml
文件中的
<form-bean>
中定义的名字一致
.depends
属性说明了这个
Field
依赖于那些校验器的校验
,
可以使用多个校验器
,
各个校验器之间使用逗号隔开
.<msg>
标记说明了当这个
Field
通不过校验的时候向用户提供的错误信息
.name
属性指定了对应的校验器
,key
属性指定了定义在
ApplicationResources.properties
文件中的错误信息
.<arg0>
和
<arg1>
是传递给校验器的参数
.<var>
标记定义了参数的名字和参数值
.
上面的这个例子说明了
password
字段由
Required,Minlength,Twofields
校验器进行校验
.
指定了这个
Field
不能为空
,
而且最小长度不能小于
8
为
,
并且必须和同一个
Form
中的另一个名为
password2
的字段相同
.
如果用户的输入不能满足这些要求
,
校验器将会抛出异常
.
下面开始将怎么在这个配置文件中配置各个校验器实现对
form
中的多中类型的
field
进行校验
.
这个校验器用来校验
Form
的输入数据不能为空
.
如果某一个
Form
的
Field
依赖于这个校验器
,
那么如果用户在
Form
中没有输入这个
Field
对应的输入数据时
,Required
校验器将会触发一个
Exception,
这个
Exception
的错误信息可以在页面或者服务端被捕捉到
.
例子
:
<field property="test" depends="required">
<msg name="required" key="test.required"/>
<arg0 key="test.testField.displayName"/>
</field>
|
上面的例子说明了
test
字段的校验规则是不能为空
,
在
ApplicationResources.properties
中的相应的定义信息可能是下面这样的情况
:
Test.testField.displayName
=
测试字段
#
上面在
<arg0>
标记中定义的
key= “test.testField”
对应这个信息
Test.required
={0}
不能为空
,
请重新输入
. #
在上面定义的
<msg>
标记对应这个信息
|
如果
Validator
校验到用户没有输入
test
这个字段
,
就会将
test.testField
对应的信息作为
test.required
的参数传递给校验器
,
如果在
JSP
页面中捕捉了错误信息
,
错误信息将会是下面的这个形式
:
“
测试字段
不能为空
,
请重新输入
”
Mask
Validator
Mask Validator
校验用户输入的数据是否遵照一定的规则
,
这个规则由开发者在
validator.xml
文件中定义
.
例子
:
<field property="postalCode" depends="mask">
<arg0 key="test.postalCode.displayname"/>
<arg1 name=”mask” key="${var:mask}" resource="false"
<var>
<var-name>mask</var-name>
<var-value>^0\d*$</var-value>
</var>
</field>
|
上面的
<arg1>
标记说明了这个校验的第二个参数是定义在下面的
<var>
标记的名为
mask
的值
.<var-value>
的值说明了这个字段必须是以数字
0
开头
,
以任意数字字符结尾的一个串
.
这个校验器校验字段是否在一个数字范围内
.
例子
:
<field property="age" depends="range">
<msg name="range" key="test.rang"/>
<arg0 key="test.age"/>
<arg1 name="range" key="${var:min}" resource="false"/>
<arg2 name="range" key="${var:max}" resource="false"/>
<var>
<var-name>min</var-name>
<var-value>1</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>100</var-value>
</var>
</field>
|
Range Validator
需要三个参数
(arg),
第一个参数
arg0
是指定这个字段的名字
,
第二个和第三个参数指定范围的最大和最小值
,
分别的名称是
max
和
min.
Maxlength
Validator
Maxlength
校验器校验一个字符串的最大长度
,
它需要两个参数
,arg0
说明字段的名称
,arg1
说明最大长度
.
例子
:
<field property="password" depends="maxlength">
<msg name="maxlength" key="test.minlength"/>
<arg0 key="test.password" />
<arg1 name="maxlength" key="${var:maxlength}" resource="false" />
<var>
<var-name>maxlength</var-name>
<var-value>8</var-value>
</var>
</field>
|
Minlength
Validator
这个校验器类似于上面的
Maxlength
Validator,
参数一样
,
校验规则也一样
,
只是作为参数的变量名字为
minlength
<field property="password" depends="minlength">
<msg name="minlength" key="test.minlength"/>
<arg0 key="test.password" />
<arg1 name="minlength" key="${var:minlength}" resource="false" />
<var>
<var-name>minlength</var-name>
<var-value>8</var-value>
</var>
</field>
|
这个校验器校验电子邮件字段
,
当用户输入的电子邮件地址不合法的时候
,
校验器抛出异常
.
例子
:
<field property="email" depends="required,email">
<msg name="required" key="test.required"/>
<msg name="email" key="test.error.email"/>
<arg0 key="test.email"/>
</field>
|
要使用
Struts
的
Validator
框架进行自动校验的
Form Bean
不能继承自普通的
ActionForm
,
必须继承自
ValidatorForm
或者
ValidatorActionForm
.
我们项目组都是继承自
ValidatorForm
.
ValidatorForm
根据
struts-config.xml
文件中的
action
的
name
属性为当前
form
的调用相应的验证器,因此在
validation.xml
中的
<form-bean>
元素的名称属性
(name)
应该与
<action>
的
name
属性值相匹配。
ValidatorActionForm
使用
struts-config.xml
中
action
的
path
属性,所以
path
属性的值相应的应该与
validation.xml
中的
Form
的
name
属性匹配。
Struts-
config.xml
文件的配置
要使用
Validator
框架的自动校验机制
,
还必须在
Struts-config.xml
文件中作相应的配置
.
除了前面已经说明了的配置
Validator
Plugin
意外
,
还需要对需要校验的
form
的
action
进行配置
.
主要有两个地方需要配置
,
一个是
<action>
的
input
属性
,
一个是
<action>
的
validate
属性
.input
属性必须指定包含校验
Form
的
jsp
页面的路径
,
以便
Struts
的校验框架校验失败的时候可以重新导向到原来的页面让用户重新输入
.validator
属性是一个
boolean
类型的属性
,
必须设置为
true struts
才会启动自动校验机制
.
Validator
的校验机制可以定义在服务端进行校验或者通过
Javascript
在浏览器端进行校验
.
这两种不同的方式在
JSP
页面编写的时候有很大的区别
.
要捕捉服务端校验的错误信息比较简单
.
只需要在
JSP
页面中嵌入一下的代码就可以在页面中显示错误信息
,
这些错误信息也可以自定义显示风格
.
<logic:messagesPresent>
<bean:message key="test.error.descript"/>
<html:messages id="error">
<li><bean:write name="error"/></li>
</html:messages>
</logic:messagesPresent>
|
<bean:message key=”test.error.descript”/>
通过
ApplicationResources.properties
文件中定义的信息向用户报告错误发生的原因和简单说明
.
<html:messages id=”error”>
<li><bean:write name=”error” /></li>
</html:messages>
则是显示具体的由
Validator
框架产生的错误信息
.
要捕捉
JavaScript
产生的错误信息首先要使
JSP
页面产生
Validator
生成的
Javascript
代码
,
并在用户点击提交按钮的时候让提交按钮触发相应的校验函数
.
实现方法如下
:
首先要让
JSP
触发校验函数
,
使用这样的
HTML
代码
:
<html:form action="/testAction.do" onsubmit="return validateTestForm(this);">
其中
action
指定这个
form
对应的
action,
这个跟普通的
form
没有区别
,onsubmit
属性就指定了校验函数
,
它的规则是
: return +
空格
+ validator+ ValidatorForm
的名字
+ (this)
注意这样的组合规则是不能变的
,
否则会导致页面错误并不能实现校验功能
.
还要注意
ValidatorForm
的名字的第一个字母一定要大写
,
不管在
Struts-congfig.xml
文件中的定义是否大写
,
这里都要把它作为大写字母
.
然后还要在
JSP
页面中产生可以实现校验的
JavaScript
代码
,
这个步骤也很简单
,
只需要在
JSP
页面的末尾加上下面一句
:
<html:javascriptformName="testForm" staticJavascript="true"/>
其中
formName
的名字要跟
struts-config.xml
文件中配置的一致
,
大小写也要一致
.staticJavascript
为
true
的时候
Validator
将使用
JavaScript
代码进行校验
(
这些
Javascript
代码由
Struts
的
validator
框架自动产生
,
我们只需要配置
validator.xml
文件
),staticJavascript
为
false
的时候
validator
将使用服务端代码进行校验
,
这些服务端的校验代码也不需要我们编写
.