本站首页    管理页面    写新日志    退出


«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7616933
建立时间:2006年5月29日




[WebWork]WebWork教程-验证框架
软件技术,  电脑与网络

lhwork 发表于 2006/6/28 16:16:46

验证框架 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中找到。


阅读全文(6244) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.063 second(s), page refreshed 144781988 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号