struts2 xmlvalidator 校验

    xiaoxiao2026-06-06  18

    分类: 【字段校验】  ---- 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" οnsubmit="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的副本。 相关资源:python入门教程(PDF版)
    最新回复(0)