35.Struts2_使用声明式验证

声明式验证步骤

一 、编写Action类

  1. package com.tg.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public class CheckAction extends ActionSupport {  
  6.   
  7.     /** 
  8.      *  
  9.      */  
  10.     private static final long serialVersionUID = 7982435824916880105L;  
  11.     private int age ;  
  12.     private String username;  
  13.       
  14.     private String email;  
  15.       
  16.     public String getEmail() {  
  17.         return email;  
  18.     }  
  19.     public void setEmail(String email) {  
  20.         this.email = email;  
  21.     }  
  22.     public String getUsername() {  
  23.         return username;  
  24.     }  
  25.     public void setUsername(String username) {  
  26.         this.username = username;  
  27.     }  
  28.     public int getAge() {  
  29.         return age;  
  30.     }  
  31.     public void setAge(int age) {  
  32.         this.age = age;  
  33.     }  
  34.     public static long getSerialversionuid() {  
  35.         return serialVersionUID;  
  36.     }  
  37.       
  38.     @Override  
  39.     public String execute() throws Exception {  
  40.         System.out.println(”age”+age);  
  41.         return SUCCESS;  
  42.     }  
  43. }  
package com.tg.action;

import com.opensymphony.xwork2.ActionSupport;

public class CheckAction extends ActionSupport {

    /**
     * 
     */
    private static final long serialVersionUID = 7982435824916880105L;
    private int age ;
    private String username;

    private String email;

    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public static long getSerialversionuid() {
        return serialVersionUID;
    }

    @Override
    public String execute() throws Exception {
        System.out.println("age"+age);
        return SUCCESS;
    }
}




二、在struts.xml中配置该Action

  1. <?xml version=“1.0” encoding=“UTF-8” ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     ”-//Apache Software Foundation//DTD Struts Configuration 2.3//EN”  
  4.     ”http://struts.apache.org/dtds/struts-2.3.dtd”>  
  5.   
  6. <struts>  
  7.       
  8.     <constant name=”struts.devMode” value=“true” />  
  9.     <constant name=”struts.action.extension” value=“action,do,,”/>  
  10.     <constant name=”struts.enable.DynamicMethodInvocation” value=“false” />  
  11.     <constant name=”struts.devMode” value=“true” />  
  12.       
  13.     <package name=“default” namespace=“/” extends=“struts-default”>  
  14.         <span style=”color:#FF0000;”><action name=“check” class=“com.tg.action.CheckAction”>  
  15.             <result name=”success”>/success.jsp</result>  
  16.             <result name=”input”>/validation.jsp</result>  
  17.           
  18.         </action></span>  
  19.     </package>  
  20.   
  21.    
  22.   
  23. </struts>  
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="struts.devMode" value="true" />
    <constant name="struts.action.extension" value="action,do,,"/>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/" extends="struts-default">
        <span style="color:#FF0000;"><action name="check" class="com.tg.action.CheckAction">
            <result name="success">/success.jsp</result>
            <result name="input">/validation.jsp</result>

        </action></span>
    </package>



</struts>


三、编写验证规则的配置文件

 去struts2-blank\WEB-INF\src\java\example 下找到 Login-validation.xml  复制 然后重命名

命名必须为   必须放置在Action类的同目录下

<ActionClassName>-validation.xml 
<ActionClassName>-<ActionAliasName>-validation.xml 
其中<ActionAliasName>就是struts.xml中<ation>的name属性值。



本例子 为 CheckAction-validation.xml

  1. <!DOCTYPE validators PUBLIC  
  2.         ”-//Apache Struts//XWork Validator 1.0.2//EN”  
  3.         ”http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd”>  
  4. <span style=”color:#FF0000;”><span><span class=“comments”><!– 校验文件的根元素 –></span><span></span></span></span>  
  5. <validators>  
  6.  <span style=”color:#FF0000;”><span> <span class=“comments”><!– 校验Action的username属性 –></span><span> </span></span></span>  
  7.      <field name=”username”>  
  8.           <field-validator type=”requiredstring”>  
  9.             <param name=”trim”>true</param>  
  10.             <message>username is required</message>  
  11.        </field-validator>  
  12.     </field>  
  13.   
  14.     <field name=”email”>  
  15.    <field-validator type=”email”>  
  16.       <message>Must provide a valid email</message>  
  17.    </field-validator>  
  18.     </field>  
  19. <span><span style=”color:#FF0000;”><span class=“comments”><!– 指定name属性必须满足必填规则 –></span></span><span><span style=“color:#FF0000;”>  </span>  
  20. </span></span>  
  21.    <field name=”age”>  
  22.         <field-validator type=”conversion” short-circuit=“true”>  
  23.              
  24.             <message>Conversion Error (Integer Wanted)</message>  
  25.         </field-validator>  
  26.         <span style=”color:#FF0000;”><span> <span class=“comments”><!– 指定age属性必须在指定范围内–</span></span>></span>  
  27.          <field-validator type=”int”>  
  28.               
  29.              <param name=”min”>20</param>  
  30.              <param name=”max”>50</param>  
  31.              <message>Age needs to be between {min}&nbsp;and&nbsp;{max}</message>  
  32.          </field-validator>  
  33.      </field>  
  34.        
  35.        
  36. </validators>  
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.2//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<span style="color:#FF0000;"><span><span class="comments"><!-- 校验文件的根元素 --></span><span></span></span></span>
<validators>
 <span style="color:#FF0000;"><span> <span class="comments"><!-- 校验Action的username属性 --></span><span> </span></span></span>
     <field name="username">
          <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>username is required</message>
       </field-validator>
    </field>

    <field name="email">
   <field-validator type="email">
      <message>Must provide a valid email</message>
   </field-validator>
    </field>
<span><span style="color:#FF0000;"><span class="comments"><!-- 指定name属性必须满足必填规则 --></span></span><span><span style="color:#FF0000;">  </span>
</span></span>
   <field name="age">
        <field-validator type="conversion" short-circuit="true">

            <message>Conversion Error (Integer Wanted)</message>
        </field-validator>
        <span style="color:#FF0000;"><span> <span class="comments"><!-- 指定age属性必须在指定范围内--</span></span>></span>
         <field-validator type="int">

             <param name="min">20</param>
             <param name="max">50</param>
             <message>Age needs to be between ${min} and ${max}</message>
         </field-validator>
     </field>


</validators>





一个Action类可以应答多个action请求 ,多个action 请求使用不同的验证规则 怎么办?


解决方案
        为每个不同的action请求 定义其对应的验证文件:ActionClassName-AliasName-
        validation.xml不带别名的配置文件:ActionClassName-validation.xml
        中的验证规则依然会起作用 可以吧各个action公有的验证规则配置在其中 但需要注意的是
        只适应于某一个action的请求的验证规则就不要再这里
        配置了

如下图



字段验证

字段校验器配置格式:

<field name=”被校验的字段”>

       <field-validator type=”校验器名”>

             <!–此处需要为不同校验器指定数量不等的校验规则–>

              <param name=”参数名”>参数值</param>

                  ………………..

               <!–校验失败后的提示信息,其中key指定国际化信息的key–>

                <message key=”I18Nkey”>校验失败后的提示信息</message>

                 <!–校验失败后的提示信息:建议用getText(“I18Nkey”),否则可能出现Freemarker template Error–>

       </field-vallidator>

        <!– 如果校验字段满足多个规则,下面可以配置多个校验器–>

</field>



非字段验证


非字段校验器配置格式:

<validator type=”校验器名”>

          <param name=”fieldName”>需要被校验的字段</param>

          <!–此处需要为不同校验器指定数量不等的校验规则–>         

<param name=”参数名”>参数值</param>

            <!–校验失败后的提示信息,其中key指定国际化信息的key–>

         <message key=”I18Nkey”>校验失败后的提示信息</message>

           <!–校验失败后的提示信息:建议用getText(“I18Nkey”),否则可能出现Freemarker template Error–>

</validator>




(1)字段校验代码,例如下面的代码:

Xml代码

    <field name=”….”>  
      <field-validator type=”…”></field-validator>  
    </filed>  

(2)非字段校验代码,例如下面的代码:
Xml代码

    <validators>  
        <validator type=”required”>  
            <param name=”fieldName”>username</param>  
            <message>用户名必须填写</message>  
        </validator>  
    </validators>  

   struts2的校验大部分是围绕Action组件的字段属性来实现的,主要是判断某个字段属性的输入是否有效,因此又把这种内置的校验器成为字段校验器。还有一种校验器它不是针对某个字段,而是针对多个字段的输入值之间的逻辑关系进行校验,典型的例子是再次输入密码的判断。内置的expression校验器就是一种非字段校验器。

    <validator type=”expression”>  
            <param name=”expression”><![CDATA[(password==repassword)]]></param>  
            <message>两次输入的密码必须完全一致!</message>  
        </validator> 
 

 非字段校验:先指定校验器:由谁来校验,来校验谁!

字段校验器:先指定校验的属性:我来校验谁,由谁来校验!



短路验证

加  short-circuit=”true”  表示当前验证器没有通过后 直接返回input视图 不会验证后面的验证器

  1. <validators>  
  2.       
  3.   
  4.    <field name=”age”>  
  5.            <field-validator type=”conversion” >  
  6.              
  7.             <message>Conversion Error (Integer Wanted)</message>  
  8.          </field-validator>  
  9.            
  10.          <field-validator type=”int” <span style=“color:#FF0000;”>short-circuit=“true”</span> >  
  11.                
  12.              <param name=”min”>20</param>  
  13.              <param name=”max”>50</param>  
  14.              <message>Age needs to be between {min}&nbsp;and&nbsp;{max}</message>  
  15.          </field-validator>  
  16.      </field>  
  17.      <field name=”username”>  
  18.           <field-validator type=”requiredstring” >  
  19.             <param name=”trim”>true</param>  
  20.             <message>username is required</message>  
  21.        </field-validator>  
  22.     </field>  
  23.   
  24.     <field name=”email”>  
  25.    <field-validator type=”email”>  
  26.       <message>Must provide a valid email</message>  
  27.    </field-validator>  
  28.     </field>  
  29.        
  30. </validators>  
<validators>
    

   <field name="age">
           <field-validator type="conversion" >
           
            <message>Conversion Error (Integer Wanted)</message>
         </field-validator>
         
         <field-validator type="int" <span style="color:#FF0000;">short-circuit="true"</span> >
             
             <param name="min">20</param>
             <param name="max">50</param>
             <message>Age needs to be between ${min} and ${max}</message>
         </field-validator>
     </field>
     <field name="username">
          <field-validator type="requiredstring" >
            <param name="trim">true</param>
            <message>username is required</message>
       </field-validator>
    </field>

    <field name="email">
   <field-validator type="email">
      <message>Must provide a valid email</message>
   </field-validator>
    </field>
     
</validators>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值