<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 297,  comments - 1618,  trackbacks - 0
     
    文:阿蜜果                                                                                        
    日期:
    2008-1-2——1-3 
    1. 文件結構

           validation.xml文件的文檔結構是由validator_1_1_3.dtd文件定義,其文件頭部內容如下:

    <?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 />子元素至少需要出現一次。<form />子元素的定義格式如下:

    <form name="">

    <field property=""></field>

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

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

    </form>

           其中屬性描述如下:

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

    l          field:對應表單中驗證的字段;

    l          property:對應ActionForm的屬性;

    l          depends:指定驗證規則,例如:requiredmaxlength等;

    l          pageActionForm若是跨頁表單,則與表單中的page屬性對應。

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

    2.1 必填(或非空)驗證

           非空驗證的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跟資源文件中的鍵對應。

    注意:為了使默認的驗證產生正確的信息,開發人員還需要在資源文件中添加errors.required等默認的錯誤信息,具體操作時,開發人員可在簡體中文的資源文件:ApplicationResources_zh_CN.properties.bak中添加如下信息:

    errors.required = {0}不能為空

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

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

    errors.short = {0}必須是一個整數

    errors.integer = {0}必須是一個整數

    errors.long={0}必須是一個整數

    errors.float={0}必須是一個浮點數

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

    errors.date={0}必須是一個日期

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

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

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

    在英文資源文件ApplicaitonResources.properties中添加如下內容:

    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 最大長度和最小長度驗證

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

    <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驗證

           Struts中還可以添加email驗證,此時dependsemail,使用舉例如下:

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

    <arg0 key="UserForm.email" />

    </field>

    2.4 日期驗證

           Struts中還可以添加日期驗證,此時dependsdate,使用舉例如下:

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

    <arg0 key="HistoryForm.begintime" />

    </field>

    2.5 整數范圍驗證

           Struts中還提供了驗證整數是否在某個范圍之間,例如下述的例子驗證整數是否在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 自定義驗證

    Struts中的驗證機制提供了擴展,開發人員可以添加自定義的驗證規則,例如可添加文件類型的驗證。此時需要編寫的Java類、在validator-rules.xml添加該驗證規則以及添加驗證的js

    自定義驗證的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自定義驗證類.

     */

    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這個驗證規則文件中添加如下內容:

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

    <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>

                  利用上面這個自定義的驗證可以驗證文件的類型,在下面的例子中驗證文件的類型是否為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.  完整配置實例

           本小節舉一個validation.xml配置的完整例子,本例匯總,對兩個表單添加了驗證規則。內容如下:

    <?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 阿蜜果 閱讀(8740) 評論(2)  編輯  收藏 所屬分類: Struts


    FeedBack:
    # re: 【Struts1.2總結系列】validation.xml驗證文件的配置
    # re: 【Struts1.2總結系列】validation.xml驗證文件的配置
    2008-07-24 23:45 | 拿磚頭拍腦袋
    恩,不錯,有啟發  回復  更多評論
      
    <2008年1月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

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

          Power Designer系統分析與建模實戰  (2015年7月出版)
          
         Struts2+Hibernate3+Spring2   (2010年5月出版)
         

    留言簿(263)

    隨筆分類

    隨筆檔案

    文章分類

    相冊

    關注blog

    積分與排名

    • 積分 - 2298200
    • 排名 - 3

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩中文字幕精品免费一区| 亚洲啪AV永久无码精品放毛片| 黄网站色视频免费看无下截| 成人黄页网站免费观看大全| 国产亚洲玖玖玖在线观看| 韩国免费一级成人毛片| 亚洲中文字幕无码爆乳app| 成人片黄网站色大片免费| 亚洲欧美日本韩国| 国产一区视频在线免费观看| 国内成人精品亚洲日本语音 | 免费看小12萝裸体视频国产| 豆国产96在线|亚洲| 亚洲中久无码不卡永久在线观看| 国产免费久久精品99久久| 亚洲av午夜成人片精品网站 | 91视频精品全国免费观看| 久久精品亚洲综合专区| 6080午夜一级毛片免费看6080夜福利 | 久久久久亚洲精品美女| 毛片免费全部播放无码| 亚洲久热无码av中文字幕| 亚洲?V乱码久久精品蜜桃| 中文成人久久久久影院免费观看| 亚洲av无码国产精品夜色午夜| 精品成在人线AV无码免费看| 一本天堂ⅴ无码亚洲道久久| 亚洲精品456播放| 免费精品99久久国产综合精品| 亚洲av无码专区在线| 亚洲成a人片在线观看国产| 叮咚影视在线观看免费完整版| 亚洲一区中文字幕在线电影网| 国产禁女女网站免费看| 中文字幕av无码不卡免费| 亚洲中文无码av永久| 亚洲日韩在线观看免费视频| 永久看日本大片免费35分钟| 羞羞漫画小舞被黄漫免费| 亚洲bt加勒比一区二区| 国产一区视频在线免费观看 |