Validator校验框架笔记

前几天尝试做一个比较大的项目作为练习,其中就牵扯到Validator校验框架,就来share下~~~

登陆界面:

登陆界面 

登陆密码错误界面:

登陆密码错误界面

——》Validator概述 《——

没有Validator,你就不得不编写验证表单数据所需的全部代码,并把它放入Form Bean对象的validate( )方法中。对于想在其上进行数据验证的每个Form Bean域来说,都需要编写逻辑代码来实现验证。此外,你还必须编写代码来存储验证失败时的出错消息。

有了Validator,你就不必在Form Bean中编写用于验证或存储错误消息的任何代码。相反,Form Bean提供了Validator的一个ActionForm子类,它提供验证或存储错误消息的功能。

可把Validator框架作为一个可用于Form Bean验证的可插入的验证例行程序系统来进行安装。每个验证例行程序都只是一个Java方法,负责执行特定类型的验证任务,验证可能通过,也可能失败。 默认情况下,Validator与几个有用的验证例行程序封装在一起来提供,这些例行程序能满足大多数情况下的验证要求。但是,如果Validator框架没有提供你需要的验证例行程序,那么你可以自己创建定制的验证例行程序,并将它插入到该框架中。此外,Validator还支持服务器端和客户端(JavaScript)的验证,而Form Bean只提供服务器端验证界面。

Validator使用两个XML配置文件来分别确定安装哪个验证例行程序和如何将它们应用于给定的应用程序。第一个配置文件validator-rules.xml说明应该被插入到框架中的验证例行程序,并提供每个验证的逻辑的名称。validator-rules.xml文件还定义了每个验证例行程序的客户端JavaScript代码。可以配置Validator让它把这个JavaScript代码发送到浏览器上,这样验证就可以在客户端和服务器端进行了。

——》启用Validator插件  《——

虽然Validator框架是与Struts封装在一起提供的,但在默认状况下Validator并不被启用。为了启用Validator,要向你的应用程序的struts-config.xml文件中添加下面的插件定义

配置struts-config.xml:

 

<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd" >

< struts-config >


    
< form-beans >
        
< form-bean  name ="loginForm"  type ="com.struts.form.LoginForm" >
        
</ form-bean >
        
< form-bean  name ="regForm"  type ="com.struts.form.RegForm" >
        
</ form-bean >

    
</ form-beans >

    
< global-exceptions  />
    
< global-forwards  />
    
< action-mappings >
        
< action  attribute ="loginForm"  input ="/index.jsp"
            name
="loginForm"  path ="/login"  scope ="request"
            type
="com.struts.action.LoginAction"  validate ="true" >
            
< forward  name ="success"  path ="/suc.jsp"   />
            
< forward  name ="error"  path ="/index.jsp" ></ forward >
        
</ action >
        
        
        
< action  attribute ="regForm"  input ="/reg.jsp"  name ="regForm"
            path
="/reg"  scope ="request"  type ="com.struts.action.RegAction"  validate ="false" >
            
< forward  name ="success"  path ="/reg_success.jsp"   />
        
</ action >

    
</ action-mappings >

    
< message-resources  parameter ="com.struts.ApplicationResources"   />
    
    
< plug-in  className ="org.apache.struts.validator.ValidatorPlugIn" >
        
< set-property  property ="pathnames"
            value
="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"   />
    
</ plug-in >

</ struts-config >

 

<action attribute="loginForm" input="/index.jsp"
            name
="loginForm" path="/login" scope="request"
            type
="com.struts.action.LoginAction" validate="true">
            
<forward name="success" path="/suc.jsp" />
            
<forward name="error" path="/index.jsp"></forward>
</action>

在上面定义中的validate="true" 将使用validator进行校验

<message-resources parameter="com.struts.ApplicationResources" />

将在下文中解释

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
  <set-property property="pathnames"
   value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
 </plug-in>

该定义告诉Struts为你的应用程序加载并初始化Validator插件。在初始化时,该插件装入由路径名属性指定的、用逗号分隔的Validator配置文件清单。


配置validator-rules.xml

Validator框架可以设置为可插入系统,其验证例行程序仅仅是插入到该系统中执行具体验证的Java方法。validator-rules.xml文件说明性地插入Validator用于执行验证的验证例行程序中。Struts示例应用程序带有这个文件的预配置拷贝。在大多数情况下,你不必修改这个预配置拷贝,除非你要向该框架中添加自己定制的验证。

 

<! DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"
>

< form-validation >

   
< global >

      
< validator  name ="required"
            classname
="org.apache.struts.validator.FieldChecks"
               method
="validateRequired"
         methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

                  msg
="errors.required" />

      
< validator  name ="requiredif"
                 classname
="org.apache.struts.validator.FieldChecks"
                 method
="validateRequiredIf"
                 methodParams
="java.lang.Object,
                               org.apache.commons.validator.ValidatorAction,
                               org.apache.commons.validator.Field,
                               org.apache.struts.action.ActionMessages,
                               org.apache.commons.validator.Validator,
                               javax.servlet.http.HttpServletRequest"

                 msg
="errors.required" />

      
< validator  name ="validwhen"
          msg
="errors.required"
                 classname
="org.apache.struts.validator.validwhen.ValidWhen"
                 method
="validateValidWhen"
                 methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"
/>


      
< validator  name ="minlength"
            classname
="org.apache.struts.validator.FieldChecks"
               method
="validateMinLength"
         methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

              depends
=""
                  msg
="errors.minlength"
           jsFunction
="org.apache.commons.validator.javascript.validateMinLength" />


      
< validator  name ="maxlength"
            classname
="org.apache.struts.validator.FieldChecks"
               method
="validateMaxLength"
         methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

              depends
=""
                  msg
="errors.maxlength"
           jsFunction
="org.apache.commons.validator.javascript.validateMaxLength" />



      
< validator  name ="mask"
            classname
="org.apache.struts.validator.FieldChecks"
               method
="validateMask"
         methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

              depends
=""
                  msg
="errors.invalid" />


      
< validator  name ="byte"
            classname
="org.apache.struts.validator.FieldChecks"
               method
="validateByte"
         methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

              depends
=""
                  msg
="errors.byte"
       jsFunctionName
="ByteValidations" />


      
< validator  name ="short"
            classname
="org.apache.struts.validator.FieldChecks"
               method
="validateShort"
         methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

              depends
=""
                  msg
="errors.short"
       jsFunctionName
="ShortValidations" />


      
< validator  name ="integer"
            classname
="org.apache.struts.validator.FieldChecks"
               method
="validateInteger"
         methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

              depends
=""
                  msg
="errors.integer"
       jsFunctionName
="IntegerValidations" />



      
< validator  name ="long"
            classname
="org.apache.struts.validator.FieldChecks"
               method
="validateLong"
         methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

              depends
=""
                  msg
="errors.long" />


      
< validator  name ="float"
            classname
="org.apache.struts.validator.FieldChecks"
               method
="validateFloat"
         methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

              depends
=""
                  msg
="errors.float"
       jsFunctionName
="FloatValidations" />

      
< validator  name ="double"
            classname
="org.apache.struts.validator.FieldChecks"
               method
="validateDouble"
         methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

              depends
=""
                  msg
="errors.double" />


      
< validator  name ="date"
            classname
="org.apache.struts.validator.FieldChecks"
               method
="validateDate"
         methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

              depends
=""
                  msg
="errors.date"
       jsFunctionName
="DateValidations" />


      
< validator  name ="intRange"
            classname
="org.apache.struts.validator.FieldChecks"
               method
="validateIntRange"
         methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

              depends
="integer"
                  msg
="errors.range" />


      
< validator  name ="floatRange"
            classname
="org.apache.struts.validator.FieldChecks"
               method
="validateFloatRange"
         methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

              depends
="float"
                  msg
="errors.range" />

      
< validator  name ="doubleRange"
            classname
="org.apache.struts.validator.FieldChecks"
               method
="validateDoubleRange"
         methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

              depends
="double"
                  msg
="errors.range" />


      
< validator  name ="creditCard"
            classname
="org.apache.struts.validator.FieldChecks"
               method
="validateCreditCard"
         methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

              depends
=""
                  msg
="errors.creditcard" />


      
< validator  name ="email"
            classname
="org.apache.struts.validator.FieldChecks"
               method
="validateEmail"
         methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

              depends
=""
                  msg
="errors.email" />

      
< validator  name ="url"
            classname
="org.apache.struts.validator.FieldChecks"
               method
="validateUrl"
         methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

              depends
=""
                  msg
="errors.url" />


     
< validator  name ="includeJavaScriptUtilities"
            classname
=""
               method
=""
         methodParams
=""
              depends
=""
                  msg
=""
           jsFunction
="org.apache.commons.validator.javascript.validateUtilities" />

   
</ global >

</ form-validation >


配置validation.xml:

 

<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"
>
< form-validation >
    
< formset >
    
< form  name ="loginForm" >
      
      
< field  property ="user"  depends ="required,mask,minlength" >
        
< arg  key ="loginForm.user.displayname"  position ="0" />
        
< arg  name ="minlength"  key ="${var:minlength}"  resource ="false"  position ="1" />
        
< var >
          
< var-name > mask </ var-name >
          
< var-value > ^w+$ </ var-value >
        
</ var >
        
< var >
          
< var-name > minlength </ var-name >
          
< var-value > 6 </ var-value >
        
</ var >
      
</ field >
      
< field  property ="pwd"  depends ="required,minlength" >
        
< arg0  key ="loginForm.pwd.displayname" />
        
< arg1  name ="minlength"  key ="${var:minlength}"  resource ="false"   />
        
        
< var >
          
< var-name > minlength </ var-name >
          
< var-value > 1 </ var-value >
        
</ var >
      
</ field >
            
    
</ form >
    
   
    
</ formset >
</ form-validation >

 

<form name="loginForm">

对应的是struts-config.xml的

< form-beans >
    
< form-bean  name ="loginForm"  type ="com.struts.form.LoginForm" >
    
</ form-bean >
    
< form-bean  name ="regForm"  type ="com.struts.form.RegForm" >
    
</ form-bean >
</ form-beans >

 

<field property="user" depends="required,mask,minlength">

定义中的property=“user”应于com.struts.form.LoginForm的ActionForm对应!

<var-value>^/w+$</var-value>

请参考另一文章 Regular Expression  关于正则表达式

<arg key="loginForm.user.displayname" position="0"/>

Validator使用Struts的资源绑定(Resource Bundle)机制将错误消息具体化。不用在框架中对错误消息进行硬编码,Validator使你能在ApplicationResources.properties文件中为一个消息指定一个键值,如果验证失败则将返回该键值。validator-rules.xml文件中的每个验证例行程序都用validator标记的msg属性指定错误消息的键值,便是上文提到的:<message-resources parameter="com.struts.ApplicationResources" />

ApplicationResources.properties:

# Resources  for  parameter  ' com.struts.application '
# Project validator


loginForm.user.displayname
= 用户名
loginForm.pwd.displayname
= 密 码
loginForm.radio.stu
= 学生
loginForm.radio.admin
= 管理员


loginForm.login.error
= 用户名或密码错误,请重新登录 !

errors.required
= {0}  不能为空.
errors.minlength
= {0}  不能少于  {1}  字符.
errors.maxlength
= {0}  不能多于  {1}  字符.
errors.invalid
= {0}  应由字母、数字和下划线组成.
errors.
byte = {0}  必须为  byte .
errors.
short = {0}  必须为  short .
errors.integer
= {0}  必须为n integer.
errors.
long = {0}  必须为  long .
errors.
float = {0}  必须为  float .
errors.
double = {0}  必须为  double .
errors.date
= {0}  is not a date.
errors.range
= {0}  is not in the range  {1}  through  {2} .
errors.creditcard
= {0}  is not a valid credit card number.
errors.email
= {0}  不是正确的邮箱地址


但是ApplicationResources.properties并无法储存中文字节

启动cmd

native2ascii -encoding gb2312 ApplicationResources_ISO.properties ApplicationResources.properties

这样就会将ISO编码的ApplicationResources转换成GB2312编码的格式了!

 ——》 创建Form Bean 《——

为了使用Validator,你的应用程序的Form Bean必须归到Validator的ActionForm的某一子类,而不是ActionForm本身。Validator的ActionForm子类提供了ActionForm的validate( )方法(它嵌入到Validator框架中)的实施过程。你不必从头编写验证代码并把它投入validate( )方法中,相反,可以完全忽略该方法,因为Validator为你提供了验证代码。

与Struts提供的核心功能相类似,Validator提供给你两种可供选择的方法来创建Form Bean。 你可以选择的第一种方法就是像下面这样创建一个特定的Form Bean对象:

com.struts.form.LoginForm

 

package  com.struts.form;

import  org.apache.struts.validator.ValidatorForm;

public   class  LoginForm  extends  ValidatorForm  {
    
    
private String user,pwd,status;
    
    
    
public String getUser() {
        
return user;
    }



    
public void setUser(String user) {
        
this.user = user;
    }



    
public String getPwd() {
        
return pwd;
    }



    
public void setPwd(String pwd) {
        
this.pwd = pwd;
    }



    
public String getStatus() {
        
return status;
    }



    
public void setStatus(String status) {
        
this.status = status;
    }


}

 

这个类与你不是用Validator所创建的类相似,但它提供ValidatorForm而不是ActionForm。这个类也不提供ActionForm的空reset( )和validate( )方法的实施过程,因为ValidatorForm提供了相应过程。

这样validator已经设置完毕,接下来在登录

< logic:messagesPresent >
                                
< html:messages  id ="messages"  message ="true" >
                                    
< bean:write  name ="messages"   />
                                
</ html:messages >
                                
< html:messages  id ="error" >
                                    
< br >
                                    
< bean:write  name ="error"   />
                                    
< br >

                                
</ html:messages >



                            
</ logic:messagesPresent >

 

结论

Validator框架针对表单数据的验证提供了可配置的系统,从而为核心Struts框架添加了很多有价值的功能。通过把Validator框架用于你的应用程序,你可以节约时间并简化Struts应用程序的开发过程。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值