java

位置:IT落伍者 >> java >> 浏览文章

Struts表单验证设计指南


发布日期:2023年12月27日
 
Struts表单验证设计指南

要在Struts项目中使用Validator功能首先需要配置Struts项目使其支持Validator框架Struts通过一个插件(Plugin)来使Struts项目支持Validator这个Plugin由Struts默认提供用户也可以自己开发自己的Validator PluginStruts默认提供的Plugin为:

orgapachestrutsvalidatorValidatorPlugIn

用户必须在strutsconfigxml 文件中配置这个Plugin才能使Struts项目支持Validator配置方法比较简单通过任何文本编辑器打开strutsconfigxml 文件在这个文件的末尾加上下面的代码重新启动JEE服务器就可以实现对Validator的支持了

<plugin className=orgapachestrutsvalidatorValidatorPlugIn>

<setpropertyproperty=pathnames

value=/WEBINF/validatorrulesxml/WEBINF/validationxml />

</plugin>

在Jbuilder开发环境中可以通过下面的方法使Struts项目支持Validator框架

在项目管理器中用鼠标右键点击Web项目(在我们的项目中是 WebModule )

选择菜单的 Properties…菜单项

在弹出的对话框的左边树型结构中选中 web 节点

在右边的 JSP/Servlet frameworks 框中勾选 sturts 节点以及 struts 节点下的 validation 子节点

点击 OK 按钮完成配置

检查 strutsconfigxml 文件可以看到配置文件里已经加入了Validator Plugin

Validatorrulesxml文件

Validatorrulesxml文件是校验器的定义文件指定了每一个校验器的基本信息和执行校验的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 等校验器后面我将讲述一些比较常用的校验器的使用方法

Validatorxml 文件

Validatorxml 文件用来定义用户需要校验的每一个JSP Form中的每一个字段的校验规则这个文件是我们在Struts项目开发中使用Validator框架所需要配置的文件这个文件的根节点是<formvalidator>在根节点下的<formset>节点的<form>子节点就对应了我们在开发JSP文件是所定义的Form标记也对应这strutsconfigxml中的form bean的定义一个<form>节点由多个<field>节点组成每个<field>节点的结构大概如下:

<field property=password depends=requiredminlengthtwofields>

<msg name=required key=testrequired/>

<msg name=minlength key=testminlength/>

<msg name=twofields key=testtwofields/>

<arg key=testpassword />

<arg name=minlength key=${var:minlength} resource=false />

<var>

<varname>minlength</varname>

<varvalue></varvalue>

</var>

<var>

<varname>secondProperty</varname>

<varvalue>password</varvalue>

</var>

</field>

其中一个<Field>对应于一个Form Bean的一个Field<Field>标记的property属性说明了这个Field对应的Form Bean的Field名称这个名称要跟strutsconfigxml文件中的<formbean>中定义的名字一致depends属性说明了这个Field依赖于那些校验器的校验可以使用多个校验器各个校验器之间使用逗号隔开<msg>标记说明了当这个Field通不过校验的时候向用户提供的错误信息name属性指定了对应的校验器key属性指定了定义在ApplicationResourcesproperties文件中的错误信息<arg>和<arg>是传递给校验器的参数<var>标记定义了参数的名字和参数值上面的这个例子说明了password字段由RequiredMinlengthTwofields校验器进行校验指定了这个Field不能为空而且最小长度不能小于并且必须和同一个Form中的另一个名为password的字段相同如果用户的输入不能满足这些要求校验器将会抛出异常

下面开始将怎么在这个配置文件中配置各个校验器实现对form中的多中类型的field进行校验

Required Validator

这个校验器用来校验Form的输入数据不能为空如果某一个Form 的 Field 依赖于这个校验器那么如果用户在Form中没有输入这个Field对应的输入数据时Required校验器将会触发一个Exception这个Exception的错误信息可以在页面或者服务端被捕捉到

例子:

<fieldproperty=test depends=required>

<msg name=required key=testrequired/>

<arg key=testtestFielddisplayName/>

</field>

上面的例子说明了test字段的校验规则是不能为空在ApplicationResourcesproperties中的相应的定义信息可能是下面这样的情况:

TesttestFielddisplayName =测试字段 #上面在<arg>标记中定义的key= testtestField 对应这个信息

Testrequired={} 不能为空请重新输入 #在上面定义的<msg>标记对应这个信息

如果Validator校验到用户没有输入test这个字段就会将testtestField对应的信息作为testrequired的参数传递给校验器如果在JSP页面中捕捉了错误信息错误信息将会是下面的这个形式:

测试字段 不能为空请重新输入

Mask Validator

Mask Validator校验用户输入的数据是否遵照一定的规则这个规则由开发者在validatorxml文件中定义

例子:

<field property=postalCode depends=mask>

<arg key=testpostalCodedisplayname/>

<arg name=mask key=${var:mask} resource=false

<var>

<varname>mask</varname>

<varvalue>^d*$</varvalue>

</var>

</field>

上面的<arg>标记说明了这个校验的第二个参数是定义在下面的<var>标记的名为mask的值<varvalue>的值说明了这个字段必须是以数字开头以任意数字字符结尾的一个串

Range Validator

这个校验器校验字段是否在一个数字范围内

例子:

<field property=age depends=range>

<msg name=range key=testrang/>

<arg key=testage/>

<arg name=range key=${var:min} resource=false/>

<arg name=range key=${var:max} resource=false/>

<var>

<varname>min</varname>

<varvalue></varvalue>

</var>

<var>

<varname>max</varname>

<varvalue></varvalue>

</var>

</field>

Range Validator需要三个参数(arg)第一个参数arg是指定这个字段的名字第二个和第三个参数指定范围的最大和最小值分别的名称是max和min

Maxlength Validator

Maxlength校验器校验一个字符串的最大长度它需要两个参数arg说明字段的名称arg说明最大长度

例子:

<field property=password depends=maxlength>

<msg name=maxlength key=testminlength/>

<arg key=testpassword />

<arg name=maxlength key=${var:maxlength} resource=false />

<var>

<varname>maxlength</varname>

<varvalue></varvalue>

</var>

</field>

Minlength Validator

这个校验器类似于上面的Maxlength Validator参数一样校验规则也一样只是作为参数的变量名字为minlength

<field property=password depends=minlength>

<msg name=minlength key=testminlength/>

<arg key=testpassword />

<arg name=minlength key=${var:minlength} resource=false />

<var>

<varname>minlength</varname>

<varvalue></varvalue>

</var>

</field>

Email Validator

这个校验器校验电子邮件字段当用户输入的电子邮件地址不合法的时候校验器抛出异常

例子:

<fieldproperty=email depends=requiredemail>

<msg name=required key=testrequired/>

<msg name=email key=testerroremail/>

<arg key=testemail/>

</field>

Form Bean的编写

要使用Struts的Validator框架进行自动校验的Form Bean不能继承自普通的ActionForm必须继承自ValidatorForm或者ValidatorActionForm我们项目组都是继承自ValidatorForm

ValidatorForm根据strutsconfigxml文件中的action的name属性为当前form的调用相应的验证器因此在validationxml中的<formbean>元素的名称属性(name)应该与<action>的name属性值相匹配

ValidatorActionForm使用strutsconfigxml中action的path属性所以path属性的值相应的应该与validationxml中的Form的name属性匹配

Strutsconfigxml文件的配置

要使用Validator框架的自动校验机制还必须在Strutsconfigxml文件中作相应的配置除了前面已经说明了的配置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=testerrordescript/>

<html:messages id=error>

<li><bean:write name=error/></li>

</html:messages>

</logic:messagesPresent>

<bean:message key=testerrordescript/>通过ApplicationResourcesproperties文件中定义的信息向用户报告错误发生的原因和简单说明

<html:messages id=error>

<li><bean:write name=error /></li>

</html:messages>

则是显示具体的由Validator框架产生的错误信息

捕捉JavaScript的错误信息

要捕捉JavaScript产生的错误信息首先要使JSP页面产生Validator生成的Javascript代码并在用户点击提交按钮的时候让提交按钮触发相应的校验函数实现方法如下:

首先要让JSP触发校验函数使用这样的HTML代码:

<html:form action=/testActiondo onsubmit=return validateTestForm(this);>

其中action指定这个form对应的action这个跟普通的form没有区别onsubmit属性就指定了校验函数它的规则是: return + 空格 + validator+ ValidatorForm的名字 + (this)

注意这样的组合规则是不能变的否则会导致页面错误并不能实现校验功能还要注意ValidatorForm的名字的第一个字母一定要大写不管在Strutscongfigxml文件中的定义是否大写这里都要把它作为大写字母

然后还要在JSP页面中产生可以实现校验的JavaScript代码这个步骤也很简单只需要在JSP页面的末尾加上下面一句:

<html:javascript formName=testForm staticJavascript=true/>

其中formName的名字要跟strutsconfigxml文件中配置的一致大小写也要一致staticJavascript为true的时候Validator将使用JavaScript代码进行校验(这些Javascript代码由Struts 的validator框架自动产生我们只需要配置validatorxml文件)staticJavascript为false的时候validator将使用服务端代码进行校验这些服务端的校验代码也不需要我们编写

上一篇:精通Hibernate:第一个Hibernate应用

下一篇:Struts1.x系列教程(19):LookupDispatchAction类处理一个form多个