Struts 1.x | validator 动态验证框架

 Struts validator 动态验证框架

 

1) struts数据的检验分成客户端检验与服务器检验。客户端检验是避免用户输入非法的的数据 , 而服务器端检验通常是把

     用户输入的正确数据与数据库的数据进行对比,然后依然业务逻辑进行检验


2) 如果要进行服务器端检验可以在Action中进行,如果要进行客户端检验则可以利用js或struts中的commons-validator

    的检验框架进行检验


3) 利用commons-validator的检验框架的步骤:
          A:编写一个ActionForm,此ActionForm类由于参与commons-validator的检验框架所以一定要继承

              org.apache.struts.validator.ValidatorForm,注意不是

              org.apache.struts.validator.DynaValidatorActionForm;
          B:去掉该ValidatorForm中自动生成的validate,和reset方法(一定要去掉否则不会生效)
          C:在WebRoot下面找到validator-rules.xml文件,打开。把其中的
                       <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.xml到文件的message-resources节点下面


              <message-resources parameter="aptech.hotelManager.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>
           D:把validator-rules.xml文件中下面内容复制到ApplicationResources.properties里面
                      # Struts Validator Error Messages
                      errors.required={0} is required.
                      errors.minlength={0} can not be less than {1} characters.
                      errors.maxlength={0} can not be greater than {1} characters.
                      errors.invalid={0} is invalid.

                      errors.byte={0} must be a byte.
                      errors.short={0} must be a short.
                      errors.integer={0} must be an integer.
                      errors.long={0} must be a long.
                      errors.float={0} must be a float.
                      errors.double={0} must be a double.

                      errors.date={0} is not a date.
                      errors.range={0} is not in the range {1} through {2}.
                      errors.creditcard={0} is an invalid credit card number.
                      errors.email={0} is an invalid e-mail address.
                  E: 如果想转换成为中文,可以利用native2ascii -encoding gb2312 源文件进行转换
                      但是关键字与参数一定不要变动
                  F: 在Action元素中增加validate="true" 与input="/检验末通过的目的页面"
                  H: 编写validation.xml文件,该文件一定要放在WebRoot下面

<form-validation>
 <formset>                                                //这里面可以放置多个ActionForm
   <form name="ruleActionForm">            //ActionForm的名字,此名字一定要与struts-config中定义的文件名一致
    <field property="uid" depends="required,maxlength">//要检证的字段名,depends指定要检验的检验器
                                                                                          //检验器可以有多少之间用逗号隔开
     <arg0 name="required" key="用户名" resource="false"/>
     <arg0 name="maxlength" key="用户名" resource="false"/>
     <arg1 name="maxlength" key="5" resource="false"/>
     <var>
      <var-name>maxlength</var-name>
      <var-value>5</var-value>   说明:
     </var>                   

 </field>

</form> 

</form-validation> 

    

A: arg0..argn用来给末通过检验时的出错信息提供参数值,该出错信息将使用默认的validator-rules.xml中定义的

         错误信息。如果想要自己定义错误信息可以使用msg格式。

         比如:<msg name="检验器名" key="出错信息"resource="false"/>                                        
                     

B:name:用来指定该参数将对应的那个检验器,一定要与检验器同名
                       

C:key:用来指定参数的值,resource="false"说明不通过资源文件直接指定值
                 

D:var用来为检验器指定检验的规则,大多数检验器都需要用户自己定义规则   
             

E:其中的var-name一定要与检验器同名,var-value用来指定规则值
                                 

F:<arg>参数可以省略name属性此时多个检验器共享arg中提供的参数值    比如:
                       <field property="uid" depends="required,mask">
                            <arg0 name="required" key="用户名" resource="false"/>
                            <arg0 name="mask" key="用户名" resource="false"/>
               可以改成:
                             <field property="uid" depends="required,mask">
                              <arg0  key="用户名" resource="false"/>表示当required检验失败时,会把"用户名"填充{0}
                                        errors.required={0} is required   而mask检验指失败时,同样会把"用户名"填充{0}
                                       errors.invalid={0} is invalid
              

 G:常见的检验器:
                   1:required必填。出错提示对应于errors.required={0} is required
                      不需要用户指定检验规则,一般配置如下
                       <field property="uid" depends="required">
                        <arg0 name="required" key="用户名" resource="false"/> 
                   2:mask。正则表达式。出错提示对应于errors.invalid={0} is invalid.
                      需要用户指定检验规则,一般配置如下
                        <form name="ruleActionForm">
                            <field property="uid" depends="required,mask">
                               <arg0 name="required" key="用户名" resource="false"/>
                               <arg0 name="mask" key="用户名" resource="false"/>//指定出错信息
                              <var> //指定规则,注意规则名一定要写mask
                                  <var-name>mask</var-name>
                                  <var-value>^[a-zA-Z0-9]{5,8}$</var-value>
                             </var>
                         </field>
                          </form>
                3:email。检查邮箱。出错提示对于 errors.email={0} is an invalid e-mail address
                         不需要指定检验规则。一般配置如下
                 <field property="email" depends="required,email">
                          <arg0 name="required" key="邮箱" resource="false"/>
                          <arg0 name="email" key="你输入的邮箱" resource="false"/>
                </field>
               4:intRange。检查一个数在某个范围之内。

                  出错提示对应于:errors.range={0} is not in the range {1} through {2}

                  需要用户指定规则。由于规则中涉汲到有多个值,所以需要用${var:变量名}的形式进行分别指定。

                 一般配置如下:

                  <field property="age" depends="intRange">
                           <arg0 name="intRange" key="年龄" resource="false"/>
                           <arg1 name="intRange" key="${var:max}" resource="false"/>
                             //${var:max}表示引用规则中的值。也可以直接写成
                             //<arg1 name="intRange" key="50" resource="false"/>
                          <arg2 name="intRange" key="${var:min}" resource="false"/>    
                                    <var> //规则名一定要与max与min。
                                    <var-name>max</var-name>
                                    <var-value>50</var-value>
                                    </var>         
                          <var>
                                   <var-name>min</var-name>
                                   <var-value>20</var-value>
                          </var>    
                </field>
         

5:validwhen。validwhen主要用于关联验证,即为了验证某个域的值,可能会参考其它域的值来进行综合判断

                      以确定该域的值是否符合要求.出错提示对应errors.required={0} is required.
     需要用户指定规则.一般配置格式:
         <field property="surePwd" depends="validwhen">
                    <msg name="validwhen"  key="两次输入的密码必须一致" resource="false"/>
                    <var>
                        <var-name>test</var-name>
                        <var-value>(*this*==pwd)</var-value>
                 </var>
        </field>
                说明:
                 1)在此使用<msg>用来自定义出错信息。

                    因为默认情况下validwhen对应的出错信息是errors.required={0},不能表达错误提示信息
                 2)<msg>中的name表示检验器名,key表示自定义的出错信息,resource="false"表示不
                   从资源文件中加载错信息
                 3)输入给validwhen的是一个布尔型表达式(对该表达式的解析使用了antlr)

                     其引用名为test,即形如:
                       <var>
                           <var-name>test</var-name>
                           <var-value>(expression)</var-name> //注意表达式一定要加括号
                       </var>
                     即,当expression为真(true)时,该域验证通过,其中,expression可以使用的元素包括:
             A:表单中其它域属性的名称,例如:
                   <var>
                        <var-name>test</var-name>
                         <var-value>(color=="red")</var-name>
                   </var>
                例子中color为表单中其它某个域的属性名。
             B:*this*,用于表示该域的属性名称,即对正在验证的属性自身,其变量的引用为*this*
             C:可以使用一些常规运算符,如 >、<、==、>=、<=、!=、+、-、*、/、%等等
       

6:date。判断是否是合法的日期.出错提示对应于errors.date={0} is not a date。需要自己定义规则.

             一般配置格式:
          <field property="dtm" depends="date">
                <arg0 name="date" key="日期" resource="false"/>
                <var>
                 <var-name>datePatternStrict</var-name> //规则名一定要是datePatternStrict
                             <var-value>yyyy-MM-dd</var-value>
                 </var>
           </field>


      H:如何显示错误信息:
          <logic:messagesPresent>  //如果存在错误
             <html:messages id="error">//依次遍历每个错误
               <li><bean:write name="error"/></li>
            </html:messages>
         </logic:messagesPresent>


      H:让struts在客户端进行验证:
           A:为jsp中的form元素增加οnsubmit="return validate.XxxForm(this);"其中的XxxForm就是在
             struts-config.xml中配置的ActionForm的名字
           B:在</html:form>的后面增加<html:javascript formName="xxxForm" />
           C:但是validwhen不支持在客户端进行验证

              应用举例:
                1)让用户填写一个注册页面。
                2)用两种方法
                    A:弹出对话框
                    B:直接在注册页面的上面来显示末通过的提示
                                                 

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值