在Struts framework中,ActionForm对象用来包装HTML表格数据(包括请求),并返回返回动态显示给用户的数据。它们必须是完全的JavaBean,并继承.Struts 里面的ActionForm类,同时,用户可以有选择地覆盖两个缺省方法validate()和reset()。
这样做的缺点:
2.维护起来很困难。 1.1 组成与配置1.1.1 组成包:commons-validator.jar 、 jakarta-oro.jar、
配置文件: validator-rules.xml、validation.xml
1.1.2 配置要求:
2、在web-inf/struts-config.xml中有如下内容
<message-resources parameter="org.apache.struts.webapp.validator.ApplicationResources"/>
<!--=====修改为你自己的ApplicationResources文件的路径 ============== -->
<!-- ========== Plug Ins Configuration ================================ -->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validator.xml"/>
</plug-in>
1.2 validation-rules.xmlvalidation-rules.xml定义了一套通用的校验规则,这些规则将在validaion.xml中被引用。你也可以自定义一些规则加到这个文件中,也可以单独存入一个文件。例如:
<validator name="minLength" classname="org.apache.struts.util.StrutsValidator" method="validateMinLength" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionErrors, javax.servlet.http.HttpServletRequest" depends="required,integer" msg="errors.minlength"> </validator>
”rg.apache.struts.util.StrutsValidator” 定义了以下方法: · validateByte
· validateCreditCard
· validateDate
· validateDouble
· validateEmail
· validateFloat
· validateInteger
· validateLong
· validateMask
· validateMinLength
· validateMaxLength
· validateRange
· validateRequired
· validateShort
1.3 validation.xmlvalidation.xml关联ActionForm和validaion-rules.xml,定义了ActionForm中各个属性的校验规则。例如:
<form-validation> <global> <constant> <constant-name>phone</constant-name> <constant-value>^//(?(//d{3})//)?[-| ]?(//d{3})[-| ]?(//d{4})___FCKpd___18lt;/constant-value> </constant> </global> <formset> <form name="checkoutForm"> <field property="phone" depends="required,mask,minLength"> <msg name="mask" key="phone.invalidformat"/> <arg0 key="registrationForm.firstname.displayname"/> <arg1 name="minlength" key="${var:minLength}" resource="false"/> <var> <var-name>mask</var-name> <var-value>${phone}</var-value> </var> <var> <var-name>minLength</var-name> <var-value>5</var-value> </var> </field> </form> </formset> </form-validation>
这个配置文件指定用”required,mask,minLength”三个规则校验”checkoutForm”中的”phone”属性:”phone”的值不可为空,必须大于或等于5个字符,字符必须满足${phone}定义的规则。
<form>:指定要校验的ActionForm
<field>:指定要校验ActionForm的哪一个属性
<msg>:校验失败时加到Action Errors中的信息,用来替代validator-rules中默认的错误信息
<arg>:一共可定义4个(arg0..arg3),作用是向资源文件提供参数的值。属性同<msg>
为了使用服务器端验证,Action Form 实现类应该扩展 ValidatorForm 而不是 ActionForm。当提交表单时,会执行 ValidatorForm 中的 validate() 方法,它将根据 validation-rules.xml 和 validation.xml 文件进行验证。
需要在 JSP 文件中的开头(即 <html:form> 前)添加 <html:errors/> 行以使错误显示出来。
这与使用客户端校验不同。
1.4 使用客户端的校验(1) 将<html:javascript formName="checkoutForm"/>加在jsp文件末尾,即</html:html>前。
它的作用是将validation-rules.xml中与”checkoutForm”相关的校验规则的javascript函数页面中。
(2) 在<html:form>中onsubmit属性。例如:<html:form action="/saveArticleType" οnsubmit="return validateCheckoutForm(this);">
说明:validateCheckoutForm()方法是在步骤(1)中自动生成的。<html:javascript>将根据formName的属性值(例如:xxx),生成validatexxx()方法。
(3) Action Form 应该去掉Validator方法。
2 扩展对象选择 在为Form选择扩展对象时,要注意:Struts框架提供了两种选择。第一种选择是使用ValidatorForm或者DynaValidatorForm;第二种选择是使用ValidatorActionForm或者DynaValidatorActionForm。
使用第一种方式的时候,在Validator.xml中的form元素的name属性必须和struts-config.xml中的action元素的name属性相匹配。
使用第二种方式时,则是与struts-config.xml中的action元素的path属性相匹配。
| ||||||||||||||||||||||||||||||||||||||
-- 作者:bibiye -- 发布时间:2005-1-21 16:23:33 -- 第二部分:使用 Struts Validator 引言Web 表单验证是开发 Web 应用程序的一个不可缺少的部分。Apache Software Foundation 开发的 Jakarta 通用验证器(Jakarta Commons Validator)提供了一个分离验证逻辑与应用程序业务逻辑的框架。您可以协同或不协同使用 Struts 与 Commons Validator。Struts 发行版附带的通用验证器(Commons Validator)通常称为 Struts 验证器(Struts Validator)。 Writing a Simple Struts Application using WebSphere Studio V5 一文介绍了未使用 Struts 验证器的 Struts 验证。ActionForm 中的 validate() 方法是通过程序化的验证逻辑实现的。然而,这种方法将验证逻辑与特定的动作表单紧紧地耦合在一起。为了重用其他表单中的验证逻辑,您可能需要进行很多复制和粘贴。 Struts 验证器通过应用基于组件的设计理念解决了这个问题。Struts 验证器使得 ActionForms 能够共享一组验证规则,这组验证规则是 XML 文件的形式保存的。另外,Struts 验证器同时支持客户端和服务器端验证。两种方法共享同一组验证规则。 本文向您展示了如何使用 Struts 验证器。我们假定您具有 Struts 框架方面的基本知识。要了解基本的 Struts 框架,请参看上面提到的文章。 先决条件启动 IBM® WebSphere® Studio Application Developer Version 5.0(带或不带 V5.01 包):
Struts 验证器基础步骤 1. 安装 Struts 应用程序本节将指导您安装一个现有的 Struts 应用程序。 导入 Struts 应用程序 EAR:
在 WebSphere Test Environment 中运行 Struts 应用程序以确保安装正确:
步骤 2. 使用 Struts 验证器验证规则保存在一个名为 validator-rules.xml 的 XML 文件中。Struts 提供了包含 14 个基本验证器的 validator-rules.xml 文件。最常用的一些文件列举如下:
将 validator-rules.xml 导入 /Web Content/WEB-INF 文件夹。
validator-rules.xml 文件的代码如下。验证器规则必须封装在标签 <form-validation> 中。验证器包含验证逻辑。在以下示例中,验证器为 required,它包含客户端和服务器端验证的验证代码。用黄色显示的代码定义了服务器端验证器类和方法,用绿色显示的代码定义了客户端验证的 JavaScript 代码。该文件中的其余验证器采用了相同的结构。 <form-validation>
</validator> 如何使用这些验证器?在大部分情况下,内置的验证器对于一个 Web 应用程序来说就足够了。为了在一个字段中使用验证器,需要在一个 XML 文件中指定验证器和字段之间的映射关系。在我们的示例中,它被命名为 validation.xml。
<form-validation> validation.xml 文件包含表单和每个字段依赖的验证器之间的映射,submitForm 中的字段 name 依赖于 required 验证器。arg0 是当错误消息产生时传递给验证器的参数。参数的键在资源绑定文件中有一个映射。由于该字段是比需的,所以将会产生一个错误消息(如果这个字段为空的话)。 将错误消息保存在哪儿?将错误消息保存在 ApplicationResources.properties 中,它是由 WebSphere Studio 创建并由 Struts 框架使用的缺省资源绑定。 用编辑器打开特性文件:
# Optional header and footer for <errors/> tag. 在这个示例中,将会显示错误消息 {0} is required,其中 {0} 由通过 <arg0 key="submitForm.name" /> 从 validation.xml 传递而来的参数替代。在这个示例中,submitForm.name 映射到(资源束文件resource bundle file)中的 text filed label,因此,最后的错误消息将会是 text field label is required。 如果启用了服务器端验证,则错误消息将会在浏览器中作为 HTML 返回。对于客户端验证,错误消息将会作为 JavaScript 弹出窗口返回。 配置 Struts 配置文件以启用验证器插件要启用验证器插件,请遵循下列步骤:
下面的步骤 3 和 4 将指导您完成各个必需的过程以启用服务器端验证和客户端验证。 步骤 3. 使用服务器端验证为了使用服务器端验证,Action Form 实现类应该扩展 ValidatorForm 而不是 ActionForm。当提交表单时,会执行 ValidatorForm 中的 validate() 方法,它将根据 validation-rules.xml 和 validation.xml 文件进行验证。 要在编辑器中打开 SubmitForm 类,请遵循下列步骤。
package com.ibm.simplevalidatorweb.forms; 您需要在 JSP 文件中添加 <html:errors/> 行以使错误显示出来:
运行该应用程序要在 WebSphere Test Environment 中运行 submitpage.jsp,请遵循下列步骤:
当在浏览器中装载 submitpage.jsp 时,单击 Submit,然后您将会接收到一个验证错误,告知 text field label 是必需的。 图 1. 运行 http://localhost:9080/SimpleValidatorWeb/submitpage.jsp 步骤 4. 使用客户端验证为了使用客户端验证,Action Form 应该扩展 ValidatorActionForm 而不是 ActionForm。如前所述,对于服务器端验证,Action Form 扩展的是 ValidatorForm 类。 在编辑器中打开 SubmitForm 类。
package com.ibm.simplevalidatorweb.forms; 修改 submitpage.jsp 以启用服务器端验证:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 行 <html:javascript formName="submitForm"/> 中的 formName submitForm 必须与 validation.xml 和 struts-config.xml 文件中的表单名称相匹配。 运行该应用程序由于我们对应用程序做了修改,所以我们必须重新启动该 EAR 项目:
在 submitpage.jsp 装载到浏览器中后,单击 Submit, 然后您将会看到一个弹出的 JavaScript 消息,告知字段 text field label 是必需的: 图 2. 客户端验证中的 JavaScript 弹出窗口 步骤 5. 使用其他验证器有时,业务要求一个字段上有多个验证器。Struts 验证器使得一个字段可以由多个验证器进行验证。 例如,要添加一个电子邮件验证器,可以如下编辑 validation.xml 并保存它: <form-validation> 重新启动 DefaultEAR 项目并再次运行 submitpage.jsp。输入一个无效的电子邮件地址并提交,您将会接收到一个错误消息,告知它不是一个有效的电子邮件地址。另外,required 验证器仍将继续工作。 图 3. e-mail 验证器发出的错误消息 在某些情况下,您可能想提供一个更具体的错误消息而不是在资源束文件中定义的缺省错误消息。例如,如果您有一个 Mask 验证器,缺省错误消息是,该值是无效的,而没有关于无效性的详细情况。您可以用另一个消息覆盖 Mask 验证器的错误消息,方式是将如下一行代码添加到 validator.xml 中:<msg name="mask" key="some.other.error.msg"/>。 将如下一行代码添加到文件 ApplicationResources.properties 中并保存: some.other.error.msg = {0} is not a 5-digit number 如下编辑 validation.xml 并保存: <form-validation> 重新启动 DefaultEAR 项目并再次运行 submitpage.jsp。一个更具体的错误消息将会显示出来。 图 4. 一个自定义的错误消息 正在在使用的 Struts 验证器如前所述,随 Struts 一起发布大约有 14 种基本的 Struts 验证器。每个验证器都可能要求不同的参数,而您必须提供正确的参数以使用它们。在本节中,您将在一个更为复杂的 Struts 应用程序中看到更多正在使用的验证器。 将 StrutsValidation.war 文件导入 DefaultEAR :
重新启动服务器并在 StrutsValidationWeb 中运行 submitpage.jsp。
图 5. 正在使用的 Struts 验证器 让我们来分析一下 validation.xml。在编辑器中打开 validation.xml。它在 /StrutsValidationWeb/Web Content/WEB-INF 中。 <form-validation> 下面是 Last Name 字段的代码。它依赖于 3 个验证器:required、mask 和 maxlength。required 验证器,如前所述,确保填写了该字段。mask 验证器在这个示例中检查是否所有的值都是字母。mask 验证器的 RegExp 表达式检查字母是否是 ^[a-zA-Z]*$。maxlength 验证器确保这个示例中的字段的长度小于或等于 10。 示例 1. Last Name 字段的验证器映射 <field property="customer.lastName" 下面的示例是使用 mask 验证器的一个小小的变种。这段代码是为 Phone 字段而写的。mask 验证器包含参数 ${phone},它是在 validation.xml 文件的开头定义的一个常量(请参见示例 3)。 示例 2. Phone 字段的验证器映射 <field property="customer.phone" 示例 3. phone 常量 <constant> 下面的代码是为 Date 字段而写的。您可以在 date 验证器上使用它本身,如示例 4 所示——它根据地区验证日期的格式。您也可以指定一个日期模式,如示例 5 所示: 示例 4. Date 验证器 <field property="creditcard.date" 示例 5. 带 datePatternStrict 的 Date 验证器 <field property="creditcard.date" 这个示例也适用于 email 和 creditCard 验证器。由于这两个验证器都很简单,所以您可以自己去分析它们。 结束语Struts 验证器框架使您能够使用服务器端和客户端验证。您可以在大多数 Web 应用程序中不加修改地使用内置的规则集。出于性能方面的考虑,客户端验证通常是更好的选择。 Struts 框架通过应用模型-视图-控制器(Model-View-Controller)范式解耦 Web 组件。Struts Tiles 框架将页面布局与表示层分离开来,而 Struts 验证器框架将验证逻辑和业务逻辑分离开来。使用 Struts 与 Struts 的相关框架可以使您的 Web 应用程序具有更好的可维护性和可重用性。 |
validation framework经验谈
最新推荐文章于 2022-04-15 07:55:12 发布