struts2 xml validator 校验

分类:
【字段校验】
 ---- field-validator 
 ---- 字段优先,我去校验谁(字段),我用谁(校验器)来校验
【非字段校验】
 ---- validator
 ---- 校验器优先,我用谁(校验器)来校验,我去校验谁(字段)
****** 这两种只是 表现形式 不同,底层是相同的,都是把错误信息放到fielderror中
命名:需要校验的Action名 + -validation.xml
位置:要和需要校验的Action放在同一目录下
 
### 只对action中的某个方法进行校验
-1-
     需要校验的Action名 + -方法名 + -validation.xml
                                      |
                       对应xml中<action>的属性的name值

 如: RegisterAction-add-validation.xml 
       --对应 /add.action   --对RegisterAction中的add()方法进行校验
-2-
     在不需要进行验证的方法加上annotation,即在方法前加上@SkipValidation。
-3-
   <action name=...>
        <interceptor-ref name="defaultStack">   
             <paramFONT-FAMILY: georgia">validation.excludeMethods">*</param>   
             <paramFONT-FAMILY: georgia">validation.includeMethods">需要验证的方法名称,以逗号分隔</param>
        </interceptor-ref>  
   </action>
 
### 校验顺序

    如果既提供了RegisterAction-validation.xml,又提供了RegisterAction-add-validation.xml
    Struts2会先校验RegisterAction-validation.xml,然后再去校验RegisterAction-add-validation.xml
    这两个都会被调用
 
### 建议:

    当有多个逻辑方法时,就不要提供RegisterAction-validation.xml
    只提供相应方法的xml文件,如:RegisterAction-execute-validation.xml
 
==============
== 字段校验 ==
==============
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-
validator-1.0.2.dtd">
<validators>
 至少提供一个 field 或 validate
 name必须提供
 1个 field 表示对一个属性的一次校验
    <field name="username">
 <field>中至少有一个或多个<field-validator>
 1个<field-validator>表示对它校验的一种方式
 type类型必须提供  类型=requiredstring 表示username必填
 验类型来自于 xwork-2.0.4.jar/com/opensymphony/xwork2/validator/validators/deault.xml
 short-circuit:表示短路,默认false若设为true,表示:这个验证器失败了,就不再执行后面的验证器了
        <field-validator type="requiredstring" short-circuit="true"> 
      
  <field-validator>中有若干个(0 ~ N)<param>子元素和一个<message>子元素
  这里的trim对应到requiredstring对应类RequiredStringValidator中的setTrim(boolean trim)方法设置的属性doTrim
  requiredstring这种校验类型,doTrim默认设为true,所以这里写与不写trim设为true都是一样的
              <param name="trim">true</param> 
            <message>用户名不能为空!</message>
       </field-validator>
 验证字符串长度
        <field-validator type="stringlength">
             <param name="minLength">6</param>   最小长度,默认-1
             <param name="maxLength">10</param>  最大长度,默认-1
             <message>用户名应该在 ${minLength} 和 ${maxLength} 之间</message>
  
  也可以用国际化的方式:<message key="error.password.required"/>
        </field-validator>
    </field>
@@@ 验证必填&字符串长度 @@@@@@@@@@@@@@@@@@@@@@@
    <field name="password">
       <field-validatorFONT-FAMILY: georgia">requiredstring">
            <message>密码不能为空</message>
       </field-validator>
            <field-validatorFONT-FAMILY: georgia">stringlength">
            <param name="minLength">6</param>  
            <paramFONT-FAMILY: verdana">maxLength">10</param> 
            <message>密码应该在 ${minLength} 和 ${maxLength} 之间</message>
       </field-validator>
    </field>
@@@ 验证数字 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    <field name="age">
       <field-validator type="required">
           <message>年龄不能为空</message>
       </field-validator>
       <field-validatorFONT-FAMILY: georgia">int">
           <paramFONT-FAMILY: verdana">min">1</param>  
           <paramFONT-FAMILY: verdana">max">150</param> 
           <message>年龄应该在 ${min} 和 ${max} 之间</message>
       </field-validator>
    </field>
@@@ 验证日期 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    <field name="birthday">                类型为requiredString用于校验String类型必填
       <field-validator type="required">  类型为required用于验证String以外的类型必填
           <message>生日不能为空</message>
       </field-validator>
       <field-validatorFONT-FAMILY: georgia">date">
           <paramFONT-FAMILY: verdana">min">2001-01-01</param>  
           <param name="max">2008-08-08</param> 
           <message>生日应该在 ${min} 和 ${max} 之间</message>
        </field-validator>
    </field>
</validators>

========================================
default.xml中提供的校验类型:
========================================
required           用于检查值是否为null
requiredstring     用于检查string是否为null或空,   参数trim,可在验证前对字符串执行trim操作
stringlength       检查string的长度是否在某个范围, 参数trim,minLength,maxLength
int/double         检查某值是否为int/double且在某个范围,参数min,max;minInclusive,maxInclusive,minExclusive,maxExclusive
date               检查date的范围,                 参数min,max
email              检查输入是否为email格式
url                检查输入是否为url格式
conversion         检查是否将出现数据转换错误
expression_r_r_r/fieldexpression_r_r_r  检查某个布尔表达式的值是否为true,后者绑定到某个字段上
     参数expression_r_r_r
visitor            使用预定义的validators进行验证,参数context
regex 检查是否能匹配到正则表达式,                 参数regex

@@@@@@@@@@@@@@
正则表达式验证:
@@@@@@@@@@@@@@
     <field name="bar2">
          <field-validator type="regex">
               <param name="regex">[0-9],[0-9]</param>
               <message>
                    bar2的值必须是"x, y"这样的格式 并且x、y都在0 ~ 9的范围内
               </message>
     </field-validator>
@@@@@@@@@
   URL  
@@@@@@@@@
    <field name="url">            
        <field-validator type="required" short-circuit="true">               
            <message>你需要输入一个URL。</message>  
        </field-validator>  
          
        <field-validator type="url" short-circuit="true">                
            <message>URL错误。</message>  
        </field-validator>  
    </field>
@@@@@@@@@@@@
   EMail  
@@@@@@@@@@@@
   <field name="mail">  
        <field-validator type="required">  
            <message>你需要输入一个电子邮件的地址。</message>  
        </field-validator>           
        <field-validator type="email">  
            <message>非法的email格式。</message>  
        </field-validator>  
    </field>
@@@@@@@@@@@@
   表达式  
@@@@@@@@@@@@
        <validator type="expression_r_r_r">           
            <param name="expression_r_r_r">name.equals(desc)</param>  
            <message>name not the same as desc</message>  
        </validator>
   OR
        <validatorexpression_r_r_r">foo gt bar</param>
           <message>foo必须大于bar.</message>
        </validator>
   OR
        <validator type="expression_r_r_r">
           <param name="expression_r_r_r">email.equals(email2)</param>
           <message>Email不等于email2</message>
        </validator>
   OR
        <validator type="expression_r_r_r" short-circuit="true">
           <param name="expression_r_r_r">email.startsWith('mark')</param>
           <message>Email没有以mark开始。</message>
        </validator>
 
---------------------------------------------------------------------------------------------------------------
 
================
== 非字段校验 ==
================
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-
validator-1.0.2.dtd">
<validators>
 
    <validate type="requiredstring"> 用谁来校验
 去校验谁
 validate中的第一个param的name属性永远都是固定的fieldName,对应与要去校验的字段名 
         <param name="fieldName">username</param> 
                <message>用户名为必填</message>
 解释:用requiredstring校验器去校验username字段,如果出错,显示<message>中的信息
    </validate>
    <validate type="stringlength">
         <paramFONT-FAMILY: georgia">fieldName">username</param>
         <param name="minLength">6</param>
         <param name="maxLength">10</param>
         <message>用户名必须在 ${minLength} 和 ${maxLength} 之间</message>
    </validate>
 

=====================================
客户端校验--功能弱,死板(不建议使用)
=====================================
1.
Struts2的<s:form>的theme一定不能设置为simple
2.
将<s:form>的validte属性设置为true
3.
Struts2的客户端校验是基于***-validation.xml中的设置生成js代码

==========================
自定义客户端校验
==========================
<s:form action="register" theme="simple" onsubmit="return validate();">
js:
function validate() {
 //document.getElementByName("username")[0] 返回一个所有名为username的数组
 //var usernamue = document.getElementByName("username")[0].value
 var usernamue = document.getElementByIdx("username").value;
 if( usernamue.length == 0 ) {
  alert("Username should not be blank!");
  return false;
 }
 ...
}

========
= 补充 =
========
1.
集合里面存放的并不是对象,而是对象的引用
如:
List list = new ArrayList();
Map map = new LinkedHashMap()'
map.put("1", list);   //存放的是映射
list.add("string1");
list.add("string2");
list.add("string3");

2.
如果既有xml校验,又有validate()校验
将先校验xml,然后进行validate()校验
然后将所有的错误添加进fielderror

3.
真正存放field级别错误信息的对象是LinkedHashMap
该LinkedHashMap的key是String类型的,value是ArrayList类型的
对于Action级别的错误信息,实际上是放置在ArrayList中的
4.
不能通过
this.getFieldError().put("...","...");的方法,添加fielderror
因为getFieldError()返回的是一个fieldErrorMap的副本。

时间: 2024-11-05 22:35:22

struts2 xml validator 校验的相关文章

struts2 xml配置中json格式数据

问题描述 struts2 xml配置中json格式数据 clientList[d+].clientaway.w+ 什么意思 可以带clientaway这个实体类中的所有属性吗 解决方案 这是正则表达式d+匹配数字w+匹配文本 clientList[d+].clientaway.w+ 可以匹配 clientList[123].clientaway.abc 之类的字符串

spring的aop是否和struts2.xml里的param配置冲突

问题描述 spring的aop是否和struts2.xml里的param配置冲突 用aop控制权限,然后把struts2所有action用spring代理创建,action里有个pagesize属性,有getset方法,在struts2里配置了一个action,其中用param 给pagesize一个默认值15,aop里是如果没权限就response跳转了,但是实际情况却是每次调那个action,都会先去执行两次getPageSize(),然后第二次response跳转就报java.lang.I

Struts2数据输入校验(2) —— XML验证

struts2提供了通过XML方式对输入数据进行验证的校验框架. 在与XXXAction同级的目录下,建立XXXAction-validation.xml,即为该Action的校验逻辑. 该校验XML的dtd格式文件为 http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd,具 体内容可以展开下面的代码: <?xml version="1.0" encoding="UTF-8"?> <

Struts2数据输入校验(1) —— 函数验证

用struts2标签库来实现上述目的的基本原理: 错误消息分为field级和action级,都在ActionSupport类中预定义了,不同的是, fieldError是通过一个Map来实现,事实上记录了field的名字和错误信息,因此能在页面上对应的 field中显示: 而actionError是通过一个Collection实现,没有记录报错的来源,只记录了错误信息. 注意,下面是简要流程: (1)页面提交到action之后,首先struts会尝试对输入的字符串信息根据Action中定义的属性

struts2 xml验证支持字段互相比较么?

问题描述 Action里面有2个字段private String flightnumber;private String flightroute;flightnumber只能是[A,B,C] 其中的任意一个值,并且在flightnumber=A 时,flightroute只能也为A像这样字段互相依赖的验证在struts2里面用xml验证能实现么? 解决方案 这属于交叉校验,现在的struts2还做不到,希望你能在你的action的方法校验里面来实现.毕竟xml的配置仅仅能实现一些简单的功能,检查

初学struts2的小白,请各位大神帮帮忙,下面是错误的提示,使用struts2进行错误校验,重装了Myeclipse,重新弄了个工作空间,重导入工程就出错误了

问题描述 八月11,20141:26:52上午com.opensymphony.xwork2.util.logging.commons.CommonsLoggererror严重:文档无效:找不到语法.at(null:2:10)org.xml.sax.SAXParseException;systemId:file:///D:/tomcat/bin/com/test/action/RegisterAction-validation.xml;lineNumber:2;columnNumber:10;文

struts2实现ajax校验的2种方法

共同的一点是,Action都需要将一个方法暴露出来,给前端javascript调用  javascript的代码都是一样的:  Js代码   function testAjax() {          var $userNameInput = $("#ajax_username");       var userName = $userNameInput.val();          $.ajax({           url : "originAjax.action&

struts2 .xml result配置问题

问题描述 访问一个页面返回success总是报:ThereisnoActionmappedfornamespace/andactionnameimagess656.-[unknownlocation]atcom.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:189)atorg.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy

struts2中输入校验错误提示显示不出来

问题描述 我在struts2输入校验中.错误提示为什么老是显示不出来呢.就是配置文件中的<message>错误提示</message>这个标签中间的文字为什么没有像书上预期的显示出来呢 解决方案 解决方案二:http://blog.csdn.net/cnidb/archive/2009/04/04/4047886.aspx解决方案三:看看你的错误信息级别:分fielderror和actionerror两个级别,画面使用对应标签即可.validate()方法和框架验证都是存放在fie