• struts2:字段校验和非字段校验代码示例


    一、为什么要使用struts2的validate验证框架

    :使用struts2的验证框架,能够提高客户端提交的数据的安全性。通过验证,确保保存进数据库的信息是正确的

    二、使用struts2的validate框架?

    : 1.我们需要配置struts2项目的最基本的jar包。(validate验证框架是有"xwork-core"包提供的)

    : 2.使用struts2自带的validate验证有两种方法

    a):使用代码实现 验证功能 (也就是重写ActionSupport中的validate()方法) 在validate方法中进行编写我们需

    要的验证功能 这里需要提几点的就是:

    1.当我们需要对action中的某一个指定的方法使用validate()方法验证时我们需要自定义一个validate

    2.当我们使用自定义的validate方法时,最好将重写的ActionSupport的validate方法去掉 (这是为了避免

    引起冲突,因为如果action类中存在重写的validate()方法 程序会自动调用我们自定义的validate方法 之

    后再调用它 这样就验证了多次,非常不利于程序的效率。而且容易出现冲突)

    3.在创建自定义的validate方法时需要注意该方法的 方法名! 该方法名由 validate+对应的表单提交的

    action中的 执行方法名称(首字母大写)

    附上一段代码:

    Java代码  收藏代码
    1. struts.xml:  
    2. <action name="*/*" class="*" method="test">  
    3.       //这里的method指定action对象调用哪一个方法执行  
    4.             //..此处省略  
    5. </action>  
    6.                           
    7. 对应的action类中的片段:  
    8. public String test(){//action操作的方法  
    9.         //..此处省略  
    10.     return "";  
    11.     }    
    12.                               
    13. public void validateTest()  
    14.             //这是我们自定义的validate方法 (validateTest) 这便是方法名  
    15. {             //一定要记住大写test的首字母  
    16.         //..此处省略  
    17. }  
    18.                               
    19. @override  
    20. Public String execute()//这是重写ActionSupport的方法  
    21.     {  
    22.         //..此处省略  
    23.         return "";  
    24. }  
    25.                               
    26. @override  
    27. public void validate()//这是重写ActionSupport的方法  如果我们需要有  
    28.        //execute方法并且还要对它接收的数据信息进行验证  
    29. {  
    30.         //那么我们可以将方法名改成 valiateExecute()便可以了  
    31. //..此处省略  
    32.       }  

             b):使用xml文件进行配置验证功能(建议使用xml配置文件进行validate的验证)

       : 1.需要使用到xwork-core包下的  xwork-validate.dtd(版本根据项目进行选择,不过大体相同)

    : 2.关于使用Xml进行验证 的两种情况: 全局验证 和局部验证

    a):关于全局验证

    全局就是针对整个action对象进行xml验证

    当我们使用全局验证时候需要在  action对象的同目录下创建一个xml配置文件

    文件名是由 : action对象的名称+(-validation.xml)

    b):关于局部验证

    局部验证是针对action对象中的某一个方法进行xml验证

    使用局部验证的时候同样要在 action对象的同目录下创建一个xml配置文件

    不过使用局部验证需要在struts.xml 中进行配置

    代码如下:(struts.xml)

    Java代码  收藏代码
    1. <constant name="struts.enable.DynamicMethodInvocation" value="false" />  
    2.   
    3. <package name="struts2" extends="struts-default">  
    4.                 //这一个<action>主要针对整个action对象  
    5.     <action name="register"class="org.viancent.action.RegisterAction">  
    6.         <result name="success">/show.jsp</result>  
    7.         <result name="input"> /register.jsp</result>  
    8.     </action>  
    9.     //这个<action>主要针对action的某一个方法 (采用了通配符 * 与 {1} 的值是相同的)  
    10.         <action name="register_*" class="org.viancent.action.RegisterAction"method="{1}">  
    11.         <result name="success">/show.jsp</result>  
    12.         <result name="input"> /register.jsp</result>  
    13.     </action>  
    14. </package>  

      //如果我们需要访问action类中的test方法 则表单上可以这样写 <s:action="register_test">

    所以该validate框架的xml配置文件名就是:action对象名+(-register_test-validation.properties)

    :3.使用struts2的validate框架有两种验证类型

    a):在服务端进行验证。
    b):在客户端进行验证。
    : 1.如果需要使用validate框架在客户端进行验证的话,一定要使用 struts2 的s标签
    并且<s:form> 表单的theme不能为:simple
     
    Java代码  收藏代码
    1. 下面给出一个实例:  
    2.     action对象:  
    3.    package org.viancent.action;  
    4.     import java.util.Date;  
    5.     import com.opensymphony.xwork2.ActionSupport;  
    6.   
    7.     public class RegisterAction extends ActionSupport {  
    8.         private String username;  
    9.         private String password;  
    10.         private String repassword;  
    11.         private int age;  
    12.         private Date birthday;  
    13.   
    14.         private String users;  
    15.         public String getUsers() {  
    16.             return users;  
    17.         }  
    18.   
    19.         public void setUsers(String users) {  
    20.             this.users = users;  
    21.         }  
    22.   
    23.         public String getUsername() {  
    24.             return username;  
    25.         }  
    26.   
    27.         public void setUsername(String username) {  
    28.             this.username = username;  
    29.         }  
    30.   
    31.         public String getPassword() {  
    32.             return password;  
    33.         }  
    34.   
    35.         public void setPassword(String password) {  
    36.             this.password = password;  
    37.         }  
    38.   
    39.         public String getRepassword() {  
    40.             return repassword;  
    41.         }  
    42.   
    43.         public void setRepassword(String repassword) {  
    44.             this.repassword = repassword;  
    45.         }  
    46.   
    47.         public int getAge() {  
    48.             return age;  
    49.         }  
    50.   
    51.         public void setAge(int age) {  
    52.             this.age = age;  
    53.         }  
    54.   
    55.         public Date getBirthday() {  
    56.             return birthday;  
    57.         }  
    58.   
    59.         public void setBirthday(Date birthday) {  
    60.             this.birthday = birthday;  
    61.         }  
    62.   
    63.         @Override  
    64.         public String execute() throws Exception {  
    65.             // TODO Auto-generated method stub  
    66.             return super.execute();  
    67.         }  
    68.   
    69.         // 自定义的执行方法  
    70.         public String test() throws Exception {  
    71.             System.out.println("test method invoked!");  
    72.             // TODO Auto-generated method stub  
    73.             return super.execute();  
    74.         }  
    75.   
    76.         // 自定义的校验方法  
    77.         public void validateTest() {  
    78.             System.out.println("validateTest method invoked!");  
    79.         }  
    80.   
    81.          @Override  
    82.         public void validate() {  
    83.         System.out.println("validate method invoked!");  
    84.          if (null == this.getPassword()  
    85.         || "".equals(this.getPassword()) || null ==   
    86.                 this.getRepassword()  
    87.          || "".equals(this.getRepassword())) {  
    88.          return;  
    89.             }  
    90.   
    91.          if (!this.getPassword().equals(this.getRepassword())) {  
    92.          this.addFieldError("repassword",  
    93.          "repassword should be same password");  
    94.          }  
    95.          }  
    96.     }  
     struts.xml的信息:
    Java代码  收藏代码
    1.               
    2. <struts>  
    3.     <constant name="struts.enable.DynamicMethodInvocation" value="false" />  
    4.   
    5. <package name="struts2" extends="struts-default">  
    6. <action name="register" class="org.viancent.action.RegisterAction">  
    7.     <result name="success">/show.jsp</result>  
    8.     <result name="input"> /register.jsp</result>  
    9. </action>  
    10. <action name="register_*" class="org.viancent.action.RegisterAction"  
    11.                         method="{1}">  
    12.     <result name="success">/show.jsp</result>  
    13.     <result name="input"> /register.jsp</result>  
    14. </action>  
    15. </package>              
    16. </struts>  

     局部validate框架的xml配置信息(RegisterAction-register_test-validation.xml)

    Java代码  收藏代码
    1.               
    2. <validators>  
    3.       
    4.     <field name="username"> //指明是对哪一个属性进行验证  
    5.          <field-validator type="requiredstring"> //验证的类型  
    6.          <param name="trim">true</param>  
    7.          <message>username should be notblank!</message>  
    8.               //如果错误显示给客户端的信息  
    9.     </field-validator>  
    10.     <field-validator type="stringlength">  
    11.         <param name="minLength">6</param>  
    12.         <param name="maxLength">10</param>  
    13.         <message>username should be not between${minLength} and ${maxLength}</message>  
    14.     </field-validator>  
    15.     </field>  
    16.   
    17.     <field name="age">  
    18.         <field-validator type="required">  
    19.         <message>age should be not blank!</message>  
    20.         </field-validator>  
    21.   
    22.         <field-validator type="int">  
    23.         <param name="min">1</param>  
    24.         <param name="max">150</param>  
    25.         <message>age should be between ${min} and ${max}</message>  
    26.         </field-validator>  
    27.     </field>  
    28.   
    29.     <field name="birthday">  
    30.         <field-validator type="required">  
    31.         <message>birthday should be not blank!</message>  
    32.         </field-validator>  
    33.   
    34.         <field-validator type="date">  
    35.         <param name="min">1990-10-10</param>  
    36.         <param name="max">2011-3-14</param>  
    37.         <message>birthday should be between ${min} and ${max} </message>  
    38.                 </field-validator>  
    39.     </field>  
    40. </validators>  

     全局validate框架的xml配置信息(RegisterAction-validation.xml)

    Java代码  收藏代码
    1.               
    2. <validators>  
    3.         <field name="users">  
    4.             <field-validator type="requiredstring">  
    5.             <message>users should be not blank!</message>  
    6.             </field-validator>  
    7.   
    8.             <field-validator type="stringlength">  
    9.             <param name="minLength">6</param>  
    10.             <param name="maxLength">10</param>  
    11.             <message>users should be between ${minLength} and ${maxLength}</message>  
    12.                </field-validator>  
    13.         </field>  
    14. </validators>  

     view 界面的jsp信息: 

    Java代码  收藏代码
    1.     register.jsp:  
    2.                   
    3.     <body style="text-align: center">  
    4.         <s:form action="register_test">//服务端验证  
    5.         <s:textfield name="username" id="username" label="username"></s:textfield>  
    6.         <s:password name="password" id="password" label="password"></s:password>  
    7.         <s:password name="repassword" id="repassword" label="repassword"></s:password>  
    8.         <s:textfield name="age" id="age" label="age"></s:textfield>  
    9.         <s:textfield name="birthday" id="birthday" label="birthday"></s:textfield>  
    10.         <s:submit></s:submit>  
    11.         <s:reset></s:reset>  
    12. </s:form>  
    13.   
    14.         <s:form action="register" validate="true">//客户端验证  validate="true"(关键点)  
    15.         <s:textfield name="users" label="users" id="users"></s:textfield>  
    16.         <s:submit></s:submit>  
    17.         </s:form>  
    18.     </body>  

     show.jsp:

    Java代码  收藏代码
    1.           
    2. <body>  
    3.     <s:property value="username"/>  
    4.     <s:property value="password"/>  
    5.     <s:property value="age"/>  
    6.     <s:property value="birthday"/>  
    7.     <s:property value="users"/>  
    8. </body>  

     这里说明一下 validate xml验证的规则

    <field name=""></field>  //自动校验器
    <validator type=""></validator> //非自动校验器
    验证规则:
    requiredstring  验证是属性是否为("")   不需要设置参数
    required     验证是属性是否为(null) 不需要设置参数
    int   验证属性是否为整数 可以这是在什么数之间 需要参数 (min,max)
    stringlength     验证字符串的长度   可以设置字符串需要的长度 需要参数(minLength,maxLength)
    date 验证对象是否在某时段  可以设置时间段 需要参数(min,max)
    regex 使用正则验证
     
    其他具体可以参看xwork-core包中的com.opensymphony.xwork2.validator.validators 下面的类以及
    xwork-default.xml
  • 相关阅读:
    图片自适应居中
    常用正则记录
    继承
    HTML学习
    js原型与原型链理解
    mac 及mac下开发常用快捷键命令
    服务器返回的各种HTTP状态码介绍(转)
    webstorm使用笔记
    《Javascript Dom 高级程序设计》读书笔记
    ECMAScript6学习笔记
  • 原文地址:https://www.cnblogs.com/Coolkaka/p/5966764.html
Copyright © 2020-2023  润新知