验证框架
WebWork提供了在Action执行之前,对输入数据的验证功能,它使用了其核心XWork的验证框架。提供了如下功能:
1、 可配置的验证文件。它的验证文件是一个独立的XML配置文件,对验证的添加、修改只需更改配置文件,无需编译任何的Class。
2、 验证文件和被验证的对象完全解藕。验证对象是普通的JavaBean就可以了(可以是FormBean、域对象等),它们不需实现任何额外的方法或继承额外的类。
3、 多种不同的验证方式。因为它验证功能是可以继承的,所以可以用多种不同的方式指定验证文件,比如:通过父类的Action、通过Action、通过Action的方法、通过Action所使用的对象,等等。
4、 强大的表达式验证。它使用了OGNL的表达式语言,提供强大的表达式验证功能。
5、 同时支持服务器端和客户端验证。
为用户注册添加验证功能
下面我们来看看如何为用户注册添加验证功能:
1、 注册我们的验证类型
WebWork为不同的验证要求提供不同的验证类型。一个验证类型,一般是有一个类来提供。这个类必须实现接口:com.opensymphony.xwork.validator.Validator,但我们在写自己的验证类型时,无需直接实现Validator接口,它有抽象类可供直接使用如ValidatorSupport、FieldValidatorSupport等。
验证类型在使用之前,必须要在ValidatorFactory(com.opensymphony.xwork.validator. ValidatorFactory)中注册。可以有二种方法实现验证类型的注册。一、写程序代码进行注册,它使用ValidatorFactory类的静态方法:registerValidator(String name, String className)。二、使用配置文件validators.xml进行注册,要求把文件validators.xml放到ClassPath的跟目录中(/WEB-INF/classes)。但在实际开发中,一般都使用第二中注册方法。我们的验证类型注册如下:
<validators>
<validator name="required" class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/>
</validators>
注册验证类型的配置文件非常简单。它使用标签<validator>提供名-值对的形式注册。这样我们的验证文件就可以直接引用它的名字。
2、 开启Action的验证功能
如果Action要使用验证框架的验证功能,它必须在配置文件中指定拦截器“validation”,它的定义如下:
<interceptor name="validation" class="com.opensymphony.xwork.validator.ValidationInterceptor"/>。
我们的验证文件必须以ActionName-validation.xml格式命名,它必须被放置到与这个Action相同的包中。你也可以为这个Action通过别名的方式指定验证文件,它的命名格式为:ActionName-aliasname-validation.xml。“ActionName ”是我们Action的类名;“aliasname”是我们在配置文件(xwork.xml)中定义这个Action所用到的名称。这样,同一个Action类,在配置文件中的不同定义就可以对应不同的验证文件。验证框架也会根据Action的继承结构去查找Action的父类验证文件,如果找到它会去执行这个父类的验证。
3、 实现我们的验证文件:RegisterActionSupport-validation.xml
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
<validators>
<field name="user.username">
<field-validator type="requiredstring">
<message>You must enter a value for username.</message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="requiredstring">
<message>You must enter a value for password.</message>
</field-validator>
<field-validator type="fieldexpression">
<param name="expression">user.password == verifyPassword</param>
<message>Passwords don't match.</message>
</field-validator>
</field>
<field name="user.email">
<field-validator type="email">
<message>You must enter a valid email.</message>
</field-validator>
</field>
<field name="user.age">
<field-validator type="int">
<param name="min">6</param>
<param name="max">100</param>
<message>Age must be between ${min} and ${max}, current value is ${user.age}.</message>
</field-validator>
</field>
</validators>
说明:
1)、<field>标签代表一个字段,它的属性“name”和页面输入框的“name”属性必需完全一致,其实它也就是我们的表达式语言。
2)、<field-validator>标签定义我们的验证规则,type属性的值就是就是我们前面定义的验证类型。
3)、验证文件中,字段的数据是通过表达式语言从我们的值堆栈(OgnlValueStack)中取得,一般是Action或Model对象。例如:我们的字段“user.age”,它会通过Action的getUser().getAge()来取得用户输入的年龄,再来根据验证的类型“int”和最大值最小值的参数来判断输入的数据是否能通过验证。
4)、不管验证是否通过,我们的Action都会执行,但如果验证没有通过,它不会调用Action的execute()方法。
4、 显示Action的验证错误信息
如果用户输入的数据验证没有通过,我们需重新返回输入页面,并给出错误信息提示。拦截器栈“validationWorkflowStack”为我们实现了这个功能。它首先验证用户输入的数据,如果验证没有通过将不执行我们Action的execute()方法,而是将请求重新返回到输入页面。
我们的xwork.xml配置文件如下:
<action name="registerSupport" class="example.register.RegisterActionSupport">
<result name="success" type="dispatcher">
<param name="location">/register-result.jsp</param>
</result>
<result name="input" type="dispatcher">
<param name="location">/registerSupport.jsp</param>
</result>
<interceptor-ref name="validationWorkflowStack"/>
</action>
通过接口ValidationAware,我们可以获得类级别或字段级别的验证错误信息,这个错误信息也就是我们验证文件中<message>标签里的数据。ActionSupport类已实现了此接口,这样在应用中我们的Action只要继承ActionSupport类就可以了。RegisterActionSupport.java代码如下:
package example.register;
import com.opensymphony.xwork.ActionSupport;
public class RegisterActionSupport extends ActionSupport {
private User user= new User();
private String verifyPassword;
public User getUser(){
return this.user;
}
public String execute(){
//在这里调用用户注册的业务逻辑,比如:将注册信息存储到数据库
return SUCCESS;
}
public String getVerifyPassword(){
return this.verifyPassword;
}
public void setVerifyPassword(String verPassword){
this.verifyPassword = verPassword;
}
}
我们WebWork的UI标签库直接提供了验证错误信息显示功能。如果字段级别的验证没有通过,它会在输入框上方显示验证文件定义的错误提示信息。我们将用户输入的页面更改如下:
registerSupport.jsp:
<%@ taglib uri="webwork" prefix="ww" %>
<html>
<head><title>Register Example</title></head>
<body>
<table border=0 width=97%>
<tr><td align="left">
<ww:form name="'test'" action="'/example/registerSupport.action'" method="'POST'">
<ww:textfield label="'Username'" name="'user.username'" required="true"/>
<ww:textfield label="'Password'" name="'user.password'" required="true"/>
<ww:textfield label="'VerifyPassword'" name="'verifyPassword'" required="true"/>
<ww:textfield label="'Email'" name="'user.email'" required="true"/>
<ww:textfield label="'Age'" name="'user.age'" required="true"/>
<ww:submit value="'Submit'"/>
</ww:form>
</td></tr>
</table>
</body>
</html>
我们上面的例子使用的是服务器端验证。WebWork也为我们提供了方便的客户端验证。它将验证自动生成JavaScript脚本。如果要使用客户端验证只需改变相应的验证类型就可以了(输入页面的表单必需使用<ww:form>标签,并设置属性“validate="true"”)。具体的验证类型可以在WebWork的包com.opensymphony.webwork.validators中找到。
WebWork提供了在Action执行之前,对输入数据的验证功能,它使用了其核心XWork的验证框架。提供了如下功能:
1、 可配置的验证文件。它的验证文件是一个独立的XML配置文件,对验证的添加、修改只需更改配置文件,无需编译任何的Class。
2、 验证文件和被验证的对象完全解藕。验证对象是普通的JavaBean就可以了(可以是FormBean、域对象等),它们不需实现任何额外的方法或继承额外的类。
3、 多种不同的验证方式。因为它验证功能是可以继承的,所以可以用多种不同的方式指定验证文件,比如:通过父类的Action、通过Action、通过Action的方法、通过Action所使用的对象,等等。
4、 强大的表达式验证。它使用了OGNL的表达式语言,提供强大的表达式验证功能。
5、 同时支持服务器端和客户端验证。
为用户注册添加验证功能
下面我们来看看如何为用户注册添加验证功能:
1、 注册我们的验证类型
WebWork为不同的验证要求提供不同的验证类型。一个验证类型,一般是有一个类来提供。这个类必须实现接口:com.opensymphony.xwork.validator.Validator,但我们在写自己的验证类型时,无需直接实现Validator接口,它有抽象类可供直接使用如ValidatorSupport、FieldValidatorSupport等。
验证类型在使用之前,必须要在ValidatorFactory(com.opensymphony.xwork.validator. ValidatorFactory)中注册。可以有二种方法实现验证类型的注册。一、写程序代码进行注册,它使用ValidatorFactory类的静态方法:registerValidator(String name, String className)。二、使用配置文件validators.xml进行注册,要求把文件validators.xml放到ClassPath的跟目录中(/WEB-INF/classes)。但在实际开发中,一般都使用第二中注册方法。我们的验证类型注册如下:
<validators>
<validator name="required" class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/>
</validators>
注册验证类型的配置文件非常简单。它使用标签<validator>提供名-值对的形式注册。这样我们的验证文件就可以直接引用它的名字。
2、 开启Action的验证功能
如果Action要使用验证框架的验证功能,它必须在配置文件中指定拦截器“validation”,它的定义如下:
<interceptor name="validation" class="com.opensymphony.xwork.validator.ValidationInterceptor"/>。
我们的验证文件必须以ActionName-validation.xml格式命名,它必须被放置到与这个Action相同的包中。你也可以为这个Action通过别名的方式指定验证文件,它的命名格式为:ActionName-aliasname-validation.xml。“ActionName ”是我们Action的类名;“aliasname”是我们在配置文件(xwork.xml)中定义这个Action所用到的名称。这样,同一个Action类,在配置文件中的不同定义就可以对应不同的验证文件。验证框架也会根据Action的继承结构去查找Action的父类验证文件,如果找到它会去执行这个父类的验证。
3、 实现我们的验证文件:RegisterActionSupport-validation.xml
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
<validators>
<field name="user.username">
<field-validator type="requiredstring">
<message>You must enter a value for username.</message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="requiredstring">
<message>You must enter a value for password.</message>
</field-validator>
<field-validator type="fieldexpression">
<param name="expression">user.password == verifyPassword</param>
<message>Passwords don't match.</message>
</field-validator>
</field>
<field name="user.email">
<field-validator type="email">
<message>You must enter a valid email.</message>
</field-validator>
</field>
<field name="user.age">
<field-validator type="int">
<param name="min">6</param>
<param name="max">100</param>
<message>Age must be between ${min} and ${max}, current value is ${user.age}.</message>
</field-validator>
</field>
</validators>
说明:
1)、<field>标签代表一个字段,它的属性“name”和页面输入框的“name”属性必需完全一致,其实它也就是我们的表达式语言。
2)、<field-validator>标签定义我们的验证规则,type属性的值就是就是我们前面定义的验证类型。
3)、验证文件中,字段的数据是通过表达式语言从我们的值堆栈(OgnlValueStack)中取得,一般是Action或Model对象。例如:我们的字段“user.age”,它会通过Action的getUser().getAge()来取得用户输入的年龄,再来根据验证的类型“int”和最大值最小值的参数来判断输入的数据是否能通过验证。
4)、不管验证是否通过,我们的Action都会执行,但如果验证没有通过,它不会调用Action的execute()方法。
4、 显示Action的验证错误信息
如果用户输入的数据验证没有通过,我们需重新返回输入页面,并给出错误信息提示。拦截器栈“validationWorkflowStack”为我们实现了这个功能。它首先验证用户输入的数据,如果验证没有通过将不执行我们Action的execute()方法,而是将请求重新返回到输入页面。
我们的xwork.xml配置文件如下:
<action name="registerSupport" class="example.register.RegisterActionSupport">
<result name="success" type="dispatcher">
<param name="location">/register-result.jsp</param>
</result>
<result name="input" type="dispatcher">
<param name="location">/registerSupport.jsp</param>
</result>
<interceptor-ref name="validationWorkflowStack"/>
</action>
通过接口ValidationAware,我们可以获得类级别或字段级别的验证错误信息,这个错误信息也就是我们验证文件中<message>标签里的数据。ActionSupport类已实现了此接口,这样在应用中我们的Action只要继承ActionSupport类就可以了。RegisterActionSupport.java代码如下:
package example.register;
import com.opensymphony.xwork.ActionSupport;
public class RegisterActionSupport extends ActionSupport {
private User user= new User();
private String verifyPassword;
public User getUser(){
return this.user;
}
public String execute(){
//在这里调用用户注册的业务逻辑,比如:将注册信息存储到数据库
return SUCCESS;
}
public String getVerifyPassword(){
return this.verifyPassword;
}
public void setVerifyPassword(String verPassword){
this.verifyPassword = verPassword;
}
}
我们WebWork的UI标签库直接提供了验证错误信息显示功能。如果字段级别的验证没有通过,它会在输入框上方显示验证文件定义的错误提示信息。我们将用户输入的页面更改如下:
registerSupport.jsp:
<%@ taglib uri="webwork" prefix="ww" %>
<html>
<head><title>Register Example</title></head>
<body>
<table border=0 width=97%>
<tr><td align="left">
<ww:form name="'test'" action="'/example/registerSupport.action'" method="'POST'">
<ww:textfield label="'Username'" name="'user.username'" required="true"/>
<ww:textfield label="'Password'" name="'user.password'" required="true"/>
<ww:textfield label="'VerifyPassword'" name="'verifyPassword'" required="true"/>
<ww:textfield label="'Email'" name="'user.email'" required="true"/>
<ww:textfield label="'Age'" name="'user.age'" required="true"/>
<ww:submit value="'Submit'"/>
</ww:form>
</td></tr>
</table>
</body>
</html>
我们上面的例子使用的是服务器端验证。WebWork也为我们提供了方便的客户端验证。它将验证自动生成JavaScript脚本。如果要使用客户端验证只需改变相应的验证类型就可以了(输入页面的表单必需使用<ww:form>标签,并设置属性“validate="true"”)。具体的验证类型可以在WebWork的包com.opensymphony.webwork.validators中找到。
发表评论
-
注册webwork/struts2的类型转换器
2010-09-23 22:46 967以全局时间统一控制为例: 时间转换器 package cn. ... -
如何给Webwork的redirect的result传递多个参数
2010-09-23 21:56 951在Webwork 2.2里面给一个Action的result传 ... -
WebWork2.2新特性之异常映射/全局异常映射(有异常的页面显示)
2010-09-23 21:44 1025在xwork中,package的定义中增加了global-ex ... -
WebWork框架- Interceptor(拦截器)
2010-09-23 21:30 752Interceptor(拦截器)将Action共用的行为独立出 ...
相关推荐
### WebWork教程精要 #### WebWork框架概览 WebWork是OpenSymphony组织研发的一款致力于组件化和代码重用的MVC模式J2EE Web框架。它在设计上注重灵活性与可扩展性,旨在简化Web应用的开发过程。当前WebWork的最新...
WebWork内置了一套强大的验证框架,可以轻松地为Action添加验证逻辑,确保输入数据的有效性。 #### 十一、实战案例与集成其他开源项目 - **G-Roller-WW**:一个具体的实战案例,展示了如何使用WebWork来开发实际的...
WebWork和Spring是两个在Java Web开发中广泛使用的框架,它们各自有其独特的优势,并且可以结合使用以增强应用的功能和可维护性。本项目"webwork-register.rar"显然是一个基于WebWork和Spring构建的注册管理系统,让...
本教程“Webwork2-Guide”旨在指导用户理解和掌握Webwork2框架的核心概念和技术。让我们深入探讨这个框架的关键特性、工作原理以及如何在实际开发中应用。 一、Webwork2核心概念 1. **Action**: Webwork2中的...
- WebWork提供了内置的验证框架来简化表单验证过程。 - 可以为Action添加验证规则,自动验证用户的输入数据。 - **XWork配置文件**: - xwork.xml是WebWork的核心配置文件,用于定义Action、拦截器、结果类型等...
以上就是WebWork教程0.90版本的主要内容,它为初学者提供了全面的引导,帮助他们理解和掌握WebWork框架的使用。通过这个教程,开发者可以学习到如何有效地构建、调试和测试Web应用程序,从而提升开发效率和代码质量...
从给定的文件信息“webwork-reference-2.2.2.pdf”中,我们可以提炼出一系列与WebWork框架相关的IT知识点。以下是对这些知识点的详细解释: ### WebWork框架概览 WebWork是一个用于Java Web应用程序开发的轻量级...
WebWork-Tags API 是一个专为WebWork框架设计的标签库,它提供了丰富的标签来简化JSP页面中的Java代码,从而提升开发效率和代码可读性。WebWork是一个基于Action的MVC(模型-视图-控制器)架构的Java Web应用框架,...
8. **插件系统**:WebWork支持插件扩展,开发者可以方便地添加自定义功能,如验证、缓存管理等。 9. **配置管理**:WebWork的配置文件(如struts-config.xml)用于定义动作、结果、数据源等,这使得配置信息集中...
**验证框架**是WebWork中用于对用户输入进行验证的工具集。 - **为用户注册添加验证功能**:通过定义验证规则,并在Action执行前后进行检查,确保用户输入的有效性。 #### 十一、XWork配置详述 **xwork.xml**是...
WebWork验证框架是一种用于Java Web应用的验证工具,它整合在XWork核心库中,主要目的是在Action执行前对用户输入的数据进行有效性检查。WebWork验证框架提供了多种灵活且强大的特性,使得数据验证过程变得更加简单...
### Webwork教程知识点详解 #### 一、WebWork框架简介 **WebWork**是一个开源的Java Web应用程序框架,它的设计理念是简化Web应用的开发过程,提高开发效率。随着时间的发展,WebWork逐渐演变成了**Struts2**框架...
6. **请求参数(Parameters)**:WebWork提供了多种方式处理请求参数,包括自动类型转换、参数验证和安全防护。理解参数绑定机制有助于构建健壮的Web应用。 7. **视图技术**:WebWork可以与多种视图技术集成,如JSP...
`Interceptor`是WebWork中的另一个关键概念,它允许在Action执行前后插入自定义逻辑,例如验证、日志记录、性能监控等。 WebWork的类型转换功能是其一大亮点,它可以自动将HTTP请求参数转换为Action类的属性类型,...
这个“培训教程-WebWork ppt(内附源码)”显然是为了帮助开发者理解和掌握WebWork框架而设计的内部培训材料。以下是基于提供的信息,对WebWork框架及其相关知识点的详细说明: 1. **WebWork入门**: WebWork入门...
此外,WebWork还提供了强大的表单验证、国际化支持以及强大的异常处理机制。深入理解WebWork源码,可以帮助开发者更好地设计和实现自己的MVC框架,或者优化现有的Web应用程序。 Tomcat源码解析: Tomcat作为Servlet...