验证框架的配置及validation.xml常用的验证规则(Struts2的输入验证详解)

5.很多验证标签的type已经改了,对应的param里面的name属性也改了-----针对最新版的struts。建议详细阅读struts的validation.html,在docs/docs下,比如regex对应的param的name 已经改为“regex”而不是expression了。具体的请看下面的内容。

另外,插入一个图片说明struts2的验证工作顺序:
验证框架的配置及validation.xml常用的验证规则(Struts2的输入验证详解)_第1张图片

一,转载内容

原文:http://www.blogjava.net/focusJ/archive/2010/11/15/367272.html

validation.xml 的命名规则和放置路径:

文件名:-validation.xml

例如:UserAction-validation.xml

就是要验证的Action类的名字。要将此文件放于Class文件相同的目录。

如果在Action类在struts配置中有多个action实例(actionName),那么对应某个action的验证文件名规则如下:

文件名:--validation.xml

例如:UserAction-login-validation.xml

(注意:上面的并不是method name,而是struts.xml中配置的action的name)


validation.xml 的内容示例:
[plain]  view plain  copy
  1.   
  2. "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  
  3.   
  4.         
  5.               
  6.                   true  
  7.                   请填写用户名  
  8.               
  9.   
  10.                
  11.                   4  
  12.                   32   
  13.                   用户名长度应在4到32个字符间   
  14.               
  15.         
  16.         
  17.               
  18.                   请填写密码  
  19.               
  20.   
  21.                
  22.                   6  
  23.                   32   
  24.                   为了您账号的安全,请设置6个字母以上的密码(最长可设置32个字母)   
  25.               
  26.         
  27.  

其实message的信息还有可以配置国际化:

配置方法也极其简单就是,key对应的是国际化配置文件中的国际化信息。

Struts2 的验证规则大概有以下数种:
required:必填校验器
requiredstring:必填字符串校验器
int:整数校验器
double:双精度浮点数校验器
date:日期校验器
expression:表达式校验器
fieldexpression:字段表达式校验器
email:电子邮件校验器
url:网址校验器
visitor:Visitor校验器
conversion:转换校验器
stringlength:字符串长度校验器
regex:正则表达式校验器


常用的验证规则:

1。必填检验



指定检验失败的提示信息





2。必填字符串检验



true
指定检验失败的提示信息





3。整数检验器/浮点检验



1
150
年纪必须在1到150之间


4。日期检验



1900-01-01
2050-02-21






5.字段表达式检验器(要求指定字段满足一个逻辑表达式)


(pass eq re_pass)
密码必须和确认密码相等





6.邮件地址校验



你的电子邮件地址必须是一个有效的电邮地址


7。网址 检验



你的主页地址必须是一个有效的网址




8.字符串长度检验



4
20
你的用户名长度必须在4到20之间




9.正则表达式检验



regex ">
您输入的用户名只能是字母和数组,且长度必须在4到25之间




接下来我举一个简单的登录验证的例子:
login.jsp
[html]  view plain  copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@ taglib uri="/struts-tags" prefix="s"%>  
  3. <%  
  4.     String path = request.getContextPath();  
  5.     String basePath = request.getScheme() + "://"  
  6.             + request.getServerName() + ":" + request.getServerPort()  
  7.             + path + "/";  
  8. %>  
  9. >  
  10. <html>  
  11.     <head>  
  12.         <base href="<%=basePath%>">  
  13.         <title>My JSP 'fail.jsp' starting pagetitle>  
  14.         <meta http-equiv="pragma" content="no-cache">  
  15.         <meta http-equiv="cache-control" content="no-cache">  
  16.         <meta http-equiv="expires" content="0">  
  17.         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  18.         <meta http-equiv="description" content="This is my page">  
  19.     head>  
  20.     <body>  
  21.         <s:form action="user/login.action" validate="true">  
  22.             <table  
  23.                 style="border-style: solid; border-color: lightblue; position: absolute; top: 30px">  
  24.                 <tbody>  
  25.                     <tr>  
  26.                         <td>  
  27.                             <div  
  28.                                 style="margin-center: 32px; border-style: solid; border-color: lightblue; border-width: 2px;">  
  29.                                 <a>用户名:a>  
  30.                                 <input id="username" name="user.name" type="text" />  
  31.                             div>  
  32.                         td>  
  33.                     tr>  
  34.                     <tr>  
  35.                         <td>  
  36.                             <div  
  37.                                 style="margin-center: 32px; border-style: solid; border-color: lightblue; border-width: 2px">  
  38.                                 <a>密  码:a>  
  39.                                 <input id="password" name="user.password" type="password" />  
  40.                             div>  
  41.                         td>  
  42.                     tr>  
  43.                       
  44.                     <tr>  
  45.                         <td>  
  46.                             <div id="msg"><s:fielderror/>div>  
  47.                         td>  
  48.                     tr>  
  49.                     <tr>  
  50.                         <td>  
  51.                             <div>  
  52.                                 <span><input id="submit" type="submit" value="登录" />  
  53.                                 span>  
  54.                             div>  
  55.                         td>  
  56.                     tr>  
  57.                 tbody>  
  58.             table>  
  59.         s:form>  
  60.     body>  
  61. html>  

这里有个地方需要注意:form中要加入validate=“true”这个属性。


***Action-validation.xml

[html]  view plain  copy
  1. xml version="1.0" encoding="UTF-8" ?>  
  2.           "-//OpenSymphony Group//XWork Validator 1.0//EN"   
  3.           "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd" >            
  4. <validators >  
  5.     <field name ="user.name" >  
  6.         <field-validator type ="requiredstring">  
  7.             <message key="username.required">message>  
  8.         field-validator>  
  9.     field>  
  10.     <field name ="user.password" >  
  11.         <field-validator type ="requiredstring">  
  12.             <message key="userpass.required">message>  
  13.         field-validator>  
  14.     field>  
  15. validators>   
这种方式就使用了国际化的信息。

***Action.action这个挺简单的就是常规的action写法,在execute中验证表单,或自己封装方法验证表单,但是不能继承validate()方法,因为action执行的时候实现检察validate方法的,如果这样的话就配置重复了,不过有什么结果我没有测试(没啥意义)。

struts.xml配置

[html]  view plain  copy
  1. <constant name="struts.custom.i18n.resources" value="globalMessages">constant>  
  2.     <include file="defaule.xml" />  
  3.       
  4.     <package name="user" extends="struts-default" namespace="/user">  
  5.         <action name="login" class="bbs.action.UserAction">  
  6.             <result name="success">/system/list.actionresult>  
  7.             <result name="input">/login.jspresult>  
  8.         action>  
  9.     package>  
有一点有必要提一下,action中必须配置input这个result,因为如果验证失败后struts2会自动转向到input的result,不管你的action中配置的验证失败的result是什么。所以这个input属性的result不能落下。

二,自己总结

1.struts2的输入校验主要包括以下的类型,他们的名字及对应的类如下所示。



 

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    


2.校验文件可以使用国际化提示信息,只需要在对应的.properties文件中添加好键值对,然后在验证文件中使用即可。比如,提示信息message标签,可以这么写,其中name.regex为国际化信息文件中的内容。

 

3.校验器可以有两种风格,上面转载的是字段(field)校验器风格,还有非字段校验器风格,如下所示(当然,最外层也是标签

foo gt bar 
    foo must be great than bar. 
 
 
    bar 
    You must enter a value for bar. 
 
 
    需要被校验的字段 
    
    参数值 
    You must enter a value for bar. 



4.短路校验器:默认都是短路的,如果没有短路,在validator标签(非字段风格)或者field-validator标签(字段风格)增加属性short-circuit="true"即可

 

5.很多验证标签的type已经改了,对应的param里面的name属性也改了-----针对最新版的struts。建议详细阅读struts的validation.html,在docs/docs下。

 

6.最新的内建校验器:

(1)conversion校验器


  ...
  
     
        true
        Conversion Error (Integer Wanted)
     
  
  ...



    
    
            myField
         Conversion Error Occurred
    
      
    
    
       
          Conversion Error Occurred
       
    

(2)date 校验器


    
    
        birthday
        01/01/1990
        01/01/2000
        Birthday must be within ${min} and ${max}
    
 
    
    
        
           01/01/1990
            01/01/2000
            Birthday must be within ${min} and ${max}
           
    
 
    
    
        
            ${minValue} 
            ${maxValue} 
            Age needs to be between ${min} and ${max}
        
    



(3)double 验证器


    
        
        percentage
        20.1
        50.1
        Age needs to be between ${minInclusive} and ${maxInclusive} (inclusive)
    
 
    
    
        
            0.123
            99.98
            Percentage needs to be between ${minExclusive} and ${maxExclusive} (exclusive)
        
    
 
    
    
        
            ${minExclusiveValue} 
            ${maxExclusiveValue} 
            Percentage needs to be between ${minExclusive} and ${maxExclusive} (exclusive)
        
    



(4)email验证器



    
        myEmail
        Must provide a valid email
    

 


   
      Must provide a valid email
   

 



   
      ${emailPattern} 
      ${emailCaseSensitive} 
      ${trimEmail} 
      Must provide a valid email
   



(5)expression验证器


      
          .... 
         Failed to meet Ognl Expression  .... 
      




(6)fieldexpression 验证器



    
    
       myField
        #myGirfriendCreditLimit]]>
       My credit limit should be MORE than my girlfriend
    
     
    
    
        
             #myGirfriendCreditLimit]]>
            My credit limit should be MORE than my girlfriend
        
    
     





(7)int 验证器


     
     
         age
         20
         50
         Age needs to be between ${min} and ${max}
     
 
     
     
         
             20
             50
             Age needs to be between ${min} and ${max}
         
     
 
     
     
         
             ${minValue} 
             ${maxValue} 
             Age needs to be between ${min} and ${max}
         
     


(8)regex验证器



    
    
        myStrangePostcode
        
    
 
    
    
        
            
        
    
 
    
    
        
            ${regexValue} 
            ${caseSensitiveValue} 
            ${trimValue} 
        
    



(9)required验证器



 
   
   
       username
       username must not be null
   
 
 
   
   
       
               username must notbe null
       
   
 




(10)requiredstring 验证器



    
    
        username
        true
        username is required
    
     
    
    
          
            true
            username is required
       
    
 
    
    
          
            ${trimValue} 
            username is required
       
    



(11)short验证器



    
    
        age
        20
        50
        Age needs to be between ${min} and ${max}
    
 
    
    
        
            20
            50
            Age needs to be between ${min} and ${max}
        
    
 
    
    
        
            ${minValue} 
            ${maxValue} 
            Age needs to be between ${min} and ${max}
        
    




(12)stringlength 验证器



    
    
        myPurchaseCode
        10
        10
        true
        Your purchase code needs to be 10 characters long
    
 
    
    
        
             10
             10
             true
             Your purchase code needs to be 10 characters long
        
    
 
    
    
        
             ${minLengthValue} 
             ${maxLengthValue} 
             ${trimValue} 
             Your purchase code needs to be 10 characters long
        
    



(13)url验证器



    
        myHomePage
        Invalid homepage url
    
 
    
    
        
            Invalid homepage url
        
    



(14)visitor验证器



    
    
        user
        myContext
        true
    
 
    
    
       
          myContext
          true
       
    



(15)conditionalvisitor验证器



    
        reason == 'colleague' and colleaguePositionID == 'OTHER'
        You must select reason Colleague and position Other
    






你可能感兴趣的:(struts2,ssh,java,j2ee,web)