posts - 297,  comments - 1618,  trackbacks - 0
           
          文:阿蜜果                                                                                        
          日期:
          2008-1-2——1-3 
          1. 文件結(jié)構(gòu)

                 validation.xml文件的文檔結(jié)構(gòu)是由validator_1_1_3.dtd文件定義,其文件頭部內(nèi)容如下:

          <?xml version="1.0" encoding="UTF-8"?>

          <!DOCTYPE form-validation PUBLIC

                    "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"

                    "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">

                 其頂層元素為:<form-validation>,它包含<formset><global>子元素。一般只需要定義<formset>元素,<formset>元素定義格式如下:

          <formset>

          <constant></constant>

          <form></form>

          </formset>

                 其中<constant />為可選子元素,而<form />子元素至少需要出現(xiàn)一次。<form />子元素的定義格式如下:

          <form name="">

          <field property=""></field>

          ..............

          <field property="" depends=""  page=""  indexedListProperty=""></field>

          </form>

                 其中屬性描述如下:

          l         name:指定了表單的名字與配置文件中的form-beanname相同;

          l          field:對應(yīng)表單中驗(yàn)證的字段;

          l          property:對應(yīng)ActionForm的屬性;

          l          depends:指定驗(yàn)證規(guī)則,例如:requiredmaxlength等;

          l          pageActionForm若是跨頁表單,則與表單中的page屬性對應(yīng)。

          2. <field>子元素配置舉例

          2.1 必填(或非空)驗(yàn)證

                 非空驗(yàn)證的depends屬性值為required,配置舉例如下:

          <form name="UserForm">

                   <field property="loginName" depends="required">

                             <arg0 key="UserForm.loginName" />

                   </field>

                   <field property="name" depends="required">

                             <arg0 key="UserForm.name" />

                   </field>

                   <field property="password" depends="required">

                             <arg0 key="UserForm.password" />

                   </field>

          </form>

          其中<arg0 key="UserForm.password" />中的key跟資源文件中的鍵對應(yīng)。

          注意:為了使默認(rèn)的驗(yàn)證產(chǎn)生正確的信息,開發(fā)人員還需要在資源文件中添加errors.required等默認(rèn)的錯(cuò)誤信息,具體操作時(shí),開發(fā)人員可在簡體中文的資源文件:ApplicationResources_zh_CN.properties.bak中添加如下信息:

          errors.required = {0}不能為空

          errors.maxlength = {0}長度不能大于{1}個(gè)字符

          errors. minlength = {0}長度不能小于{1}個(gè)字符

          errors.short = {0}必須是一個(gè)整數(shù)

          errors.integer = {0}必須是一個(gè)整數(shù)

          errors.long={0}必須是一個(gè)整數(shù)

          errors.float={0}必須是一個(gè)浮點(diǎn)數(shù)

          errors.double ={0}必須是一個(gè)雙精度型

          errors.date={0}必須是一個(gè)日期

          errors.range = {0}必須是 {1} {2}之間的整數(shù)

          errors.creditcard={0}必須是一個(gè)有效的信用卡號碼

          errors.email = {0}是無效e-mail地址

          在英文資源文件ApplicaitonResources.properties中添加如下內(nèi)容:

          errors.required={0} is required.

          errors.minlength={0} can not be less than {1} characters.

          errors.maxlength={0} can not be greater than {1} characters.

          errors.invalid={0} is invalid.

                  

          errors.byte={0} must be a byte.

          errors.short={0} must be a short.

          errors.integer={0} must be an integer.

          errors.long={0} must be a long.

          errors.float={0} must be a float.

          errors.double={0} must be a double.

                  

          errors.date={0} is not a date.

          errors.range={0} is not in the range {1} through {2}.

          errors.creditcard={0} is an invalid credit card number.

          errors.email={0} is an invalid e-mail address.

          2.2 最大長度和最小長度驗(yàn)證

                 可在<field>元素的depends屬性中添加maxlengthminlength來限制對于那個(gè)字段的最大長度和最小長度,使用舉例如下:

          <field property="password" depends = "required, maxlength, minlength">

          <arg0 key = "UserForm.password"/>

          <var>

          <var-name>maxlength</var-name>

          <var-value>12</var-value>

          </var>

          <var>

          <var-name>minlength</var-name>

          <var-value>6</var-value>

          </var>

          </field>

          2.3 Email驗(yàn)證

                 Struts中還可以添加email驗(yàn)證,此時(shí)dependsemail,使用舉例如下:

          <field property="email" depends="required, email">

          <arg0 key="UserForm.email" />

          </field>

          2.4 日期驗(yàn)證

                 Struts中還可以添加日期驗(yàn)證,此時(shí)dependsdate,使用舉例如下:

          <field property="begintime" depends="date">

          <arg0 key="HistoryForm.begintime" />

          </field>

          2.5 整數(shù)范圍驗(yàn)證

                 Struts中還提供了驗(yàn)證整數(shù)是否在某個(gè)范圍之間,例如下述的例子驗(yàn)證整數(shù)是否在19999之間,配置如下:

          <field property="score" depends="intRange">

          <arg0 key="TestForm.score" />

          <arg1 name="intRange" key="${var:min}" resource="false" />

          <var>

          <var-name>min</var-name>

          <var-value>1</var-value>

          </var>

          <arg2 name="intRange" key="${var:max}" resource="false" />

          <var>

          <var-name>max</var-name>

          <var-value>99999</var-value>

          </var>

          </field>

          2.6 自定義驗(yàn)證

          Struts中的驗(yàn)證機(jī)制提供了擴(kuò)展,開發(fā)人員可以添加自定義的驗(yàn)證規(guī)則,例如可添加文件類型的驗(yàn)證。此時(shí)需要編寫的Java類、在validator-rules.xml添加該驗(yàn)證規(guī)則以及添加驗(yàn)證的js

          自定義驗(yàn)證的JavaCustomValidator的代碼如下所示:

          package com.amigo.struts.validation;

          import java.util.regex.Matcher;

          import java.util.regex.Pattern;

          import javax.servlet.http.HttpServletRequest;

          import org.apache.commons.validator.Field;

          import org.apache.commons.validator.GenericValidator;

          import org.apache.commons.validator.Validator;

          import org.apache.commons.validator.ValidatorAction;

          import org.apache.commons.validator.util.ValidatorUtils;

          import org.apache.struts.action.ActionMessages;

          import org.apache.struts.validator.Resources;

          /**

           * Struts自定義驗(yàn)證類.

           */

          public class CustomValidator {

                  

                   /**

                    * 判斷文件類型

                    */

                   public static boolean validateFileType(Object bean, ValidatorAction va,

                                      Field field, ActionMessages errors, Validator validator,

                                      HttpServletRequest request) {

                             String value = ValidatorUtils.getValueAsString(bean, field

                                               .getProperty());

                             String inputType = value.substring(value.lastIndexOf('.'));

                             String type[] = field.getVarValue("fileTypeProperty").split(";");

                             if (!GenericValidator.isBlankOrNull(value)) {

                                      try {

                                               boolean judge = false;

                                               for (int i = 0; i < type.length; i++) {

                                                         Pattern p = Pattern.compile(type[i],

                                                                           Pattern.CASE_INSENSITIVE);

                                                         Matcher m = p.matcher(inputType);

                                                         judge = m.matches();

                                                         if (judge) {

                                                                  break;

                                                         }

                                               }

                                              

                                               if (!judge) {

                                                         errors.add(field.getKey(), Resources.getActionMessage(

                                                                           validator, request, va, field));

                                                         return false;

                                               }

                                      } catch (Exception e) {

                                               errors.add(field.getKey(), Resources.getActionMessage(

                                                                  validator, request, va, field));

                                               return false;

                                      }

                             }

                             return true;

                   }

          }

                 接著還需要在validator-rules.xml這個(gè)驗(yàn)證規(guī)則文件中添加如下內(nèi)容:

          <!-- 判斷文件類型-->

          <validator name="fileType" classname="com.cotel.comm.EarlyValidator" method="validateFileType"

                                      methodParams="java.lang.Object,

                                 org.apache.commons.validator.ValidatorAction,

                                 org.apache.commons.validator.Field,

                                 org.apache.struts.action.ActionMessages,

                                 org.apache.commons.validator.Validator,

                                 javax.servlet.http.HttpServletRequest"

                                      msg="errors.fileType">

                                      <javascript>

                                               <![CDATA[

           function validateFileType(form) {

                  var isValid = true;

                  var focusField = null;

                  var i = 0;

                  var fields = new Array();

                  var formName = form.getAttributeNode("name");

                            

                 oFileType = eval('new ' + formName.value + '_fileType()'); 

                 

                

               

                  for (x in oFileType) {

                      var field = form[oFileType[x][0]];

                                     

                     

                      if ((field.type == 'hidden' ||

                          field.type == 'text' ||

                          field.type == 'file' ||

                          field.type == 'textarea') &&

                          field.disabled == false) {

                                     

                       var iMax =oFileType[x][2]("fileTypeProperty").split(";");

                       var index = field.value.lastIndexOf(".");

                    var length = field.value.length;

                            var fileType= field.value.substring(index, length);

                            var judege=false;

                          

                           if(length>0 && fileType!=""){

                   for (var j = 0; j < iMax.length; j++) {

                      if (iMax[j].toLowerCase() == fileType.toLowerCase()) {

                          judege = true;

                          break;

                      }

                            }

                          

                      if (!judege) {

                      if (i == 0) {

                                  focusField = field;

                              }

                    

                              fields[i++] = oFileType[x][1];

                              isValid = false;

                          }

                          }

                      }

                  }

                  if (fields.length > 0) {

                     focusField.focus();

                     alert(fields.join('"n'));

                  }

                  return isValid;

              }

              ]]>

                                      </javascript>

                             </validator>

                        利用上面這個(gè)自定義的驗(yàn)證可以驗(yàn)證文件的類型,在下面的例子中驗(yàn)證文件的類型是否為jpg的,舉例如下:

          <field property="picPath" depends="required,fileType">

                   <arg0 key="TestForm.picPath" />

                   <var>

                             <var-name>fileTypeProperty</var-name>

                             <var-value>.jpg</var-value>

                   </var>

          </field>

          3.  完整配置實(shí)例

                 本小節(jié)舉一個(gè)validation.xml配置的完整例子,本例匯總,對兩個(gè)表單添加了驗(yàn)證規(guī)則。內(nèi)容如下:

          <?xml version="1.0" encoding="UTF-8"?>

          <!DOCTYPE form-validation PUBLIC

                    "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"

                    "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">

          <form-validation>

                   <formset>

                             <form name="UserinfoForm">

                                      <field property="email" depends="email">

                                               <arg0 key="UserinfoForm.email" />

                                      </field>

                                      <field property="mobile" depends="required">

                                               <arg0 key="UserinfoForm.mobile" />

                                      </field>

                                      <field property="description" depends="maxlength">

                                               <arg0 key="UserinfoForm.description" />

                                               <arg1 name="maxlength" key="${var:maxlength}" resource="false" />

                                               <var>

                                                         <var-name>maxlength</var-name>

                                                         <var-value>200</var-value>

                                               </var>

                                      </field>

                             </form>

                             <form name="PasswordForm">

                                      <field property="newPass" depends="required">

                                               <arg0 key="PasswordForm.newPass" />

                                      </field>

                                      <field property="oldPass" depends="required">

                                               <arg0 key="PasswordForm.oldPass" />

                                      </field>

                                      <field property="conPass" depends="required">

                                               <arg0 key="PasswordForm.conPass" />

                                      </field>

                             </form>

                   </formset>

          </form-validation>

          posted on 2008-01-05 12:37 阿蜜果 閱讀(8744) 評論(2)  編輯  收藏 所屬分類: Struts


          FeedBack:
          # re: 【Struts1.2總結(jié)系列】validation.xml驗(yàn)證文件的配置
          2008-03-20 10:36 | 開心就好
          # re: 【Struts1.2總結(jié)系列】validation.xml驗(yàn)證文件的配置
          2008-07-24 23:45 | 拿磚頭拍腦袋
          恩,不錯(cuò),有啟發(fā)  回復(fù)  更多評論
            
          <2008年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

                生活將我們磨圓,是為了讓我們滾得更遠(yuǎn)——“圓”來如此。
                我的作品:
                玩轉(zhuǎn)Axure RP  (2015年12月出版)
                

                Power Designer系統(tǒng)分析與建模實(shí)戰(zhàn)  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          關(guān)注blog

          積分與排名

          • 積分 - 2299173
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 瑞昌市| 彩票| 峨眉山市| 介休市| 汤原县| 德钦县| 兴业县| 潮安县| 茌平县| 修文县| 兴海县| 宁海县| 合川市| 阿合奇县| 克东县| 黄冈市| 阳新县| 上林县| 兴业县| 北碚区| 霍城县| 密山市| 武川县| 黄平县| 应城市| 新巴尔虎右旗| 潮州市| 海盐县| 大姚县| 鞍山市| 安西县| 庆云县| 永靖县| 海门市| 秦安县| 象山县| 夏邑县| 崇州市| 堆龙德庆县| 宝山区| 荣昌县|