`
wxzauh
  • 浏览: 18149 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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 ,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 进行校验 .

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>


Email 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" 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 将使用服务端代码进行校验 , 这些服务端的校验代码也不需要我们编写 .

分享到:
评论

相关推荐

    struts2和struts1 API及使用指南 chm

    4. **表单验证**:Struts1的表单验证在Action中进行,而Struts2可以通过注解或XML配置文件进行字段级别的验证。 5. **国际化和本地化**:两者都支持,但在Struts2中更加简单,可以直接在Action类或JSP页面中使用。 ...

    Struts Validator验证器使用指南

    由于其易用性和强大的功能,许多开发者选择使用Struts Validator来简化他们的表单验证过程。 #### 二、Struts Validator 的工作原理 当使用Struts Validator时,建议继承`ValidatorForm`而非传统的`ActionForm`,...

    Struts2开发指南

    **Struts2开发指南** Struts2是一款强大的Java Web应用程序框架,它基于MVC(Model-View-Controller)设计模式,旨在简化企业级应用的开发流程。本指南将帮助初学者快速入门,理解并掌握Struts2的核心概念、配置及...

    Struts Validator 开发指南

    每个 `&lt;form&gt;` 节点对应于一个 Struts 表单 Bean,而 `&lt;field&gt;` 节点则定义了特定字段的验证规则,如上面的示例所示,`,minlength,twofields"&gt;` 指定密码字段必须被 `required`、`minlength` 和 `twofields` 这三个...

    Struts Validator验证器使用指南.doc

    1. **验证器的扩展性**:在开发过程中,开发人员可以选择扩展`ValidatorForm`或`ValidatorActionForm`来实现表单验证。扩展`ValidatorForm`时,需要确保`struts-config.xml`中action的`name`属性与`validator-rules....

    Struts开发指南03

    尽管这个例子展示了如何使用Struts标签库(struts-bean.tld和struts-html.tld)和Validator插件进行表单验证,但同时也暴露出将大量业务逻辑放入Action的不良实践,这在实际开发中应避免,以便更好地分离关注点,...

    struts快速学习指南 pdf电子书

    本快速学习指南将帮助初学者深入理解Struts框架的核心概念、架构和使用方法,从而快速上手开发Java Web应用。 首先,我们来了解Struts的基本架构。Struts通过分离业务逻辑、视图展示和控制流程,实现了应用的模块化...

    Struts 2权威指南源码.rar

    3. **表单验证**:利用Struts 2的验证框架对用户输入进行验证。 4. **结果类型示例**:展示不同结果类型的应用,如dispatcher(默认的JSP渲染)和redirect(重定向)。 5. **OGNL表达式使用**:在Action与JSP间...

    JCaptcha4Struts2快速使用指南

    【JCaptcha4Struts2快速使用指南】 JCaptcha4Struts2 是一个专门为Struts2框架集成JCaptcha验证码服务的插件。JCaptcha本身是一种强大的、可自定义的图像验证码库,旨在防止自动机器人和恶意软件对网站进行非法操作...

    struts2 权威指南完整版PDF

    例如,ValidationInterceptor用于表单验证,PrepareInterceptor则用于在Action执行前准备数据。 5. **插件和扩展**:Struts2支持丰富的插件系统,如Tiles插件用于布局管理,Freemarker或Velocity插件作为视图模板...

    struts2权威指南源代码

    Struts2是Apache软件基金会旗下的一个开源框架,用于构建企业级...通过深入研究《Struts2权威指南》的源代码,读者不仅可以学习到Struts2的基本用法,还能掌握其高级特性和最佳实践,从而更好地应用于实际项目开发中。

Global site tag (gtag.js) - Google Analytics