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

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

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

    午夜拍鍵驚奇
    子夜 編程 代碼與我同在
    posts - 48,comments - 118,trackbacks - 79

    在Struts中對用戶輸入信息的校驗一般在FromBean中進行(除非需要訪問數據庫進行諸如登錄信息的校驗,因為這是Action的工作),本文將闡述如何在Struts中實現可配置的信息校驗。

    一、在FormBean中手工實現

    最簡單的方法是直接在FormBean中重寫ActionForm類的validate方法,validate方法簽名如下:

    public ActionErrors validate(ActionMapping mapping, HttpServletRequest req)

    比如需要校驗age字段必須填寫數字:

     1public ActionErrors validate(ActionMapping mapping, HttpServletRequest req){
     2  ActionErrors errors = new ActionErrors();
     3
     4  String age = this.getAge();
     5  if(!this.isNumber(age))// isNumber() is not implemented
     6    errors.add(  ,  );
     7  }

     8
     9  return errors;
    10}

    在form提交后,容器會調用validate方法對表單數據進行校驗,如果返回的ActionErrors為空(即校驗通過),則將FormBean提交Action,否則重定向到提交form的頁面。
    這種方法實現簡單,直觀,容易測試、調試,但不可避免地存在以下缺點:

    1、很難重用,導致重復開發
    有很多校驗邏輯在整個網站中是相同的,比如上述的數字校驗,還有email校驗、長度校驗等等,而通過覆蓋validate方法很難對這些校驗過程進行重用,除非定義一些helper類封裝校驗方法(比如上述的isNumber())。而當需要為另一個FormBean加入相同的校驗邏輯時必須重復地覆蓋validate方法

    2、難于擴展
    當要對一個表單增、刪、改校驗邏輯時必須修改validate方法,重新打包、部署

    3、不可配置
    因為校驗邏輯硬編碼于class文件中,運行時不可能做到靈活地配置校驗邏輯

    因此,Struts中加入了另一種更靈活的校驗機制:

    二、使用Validator

    Validator提供了一種基于xml配置文件的校驗模型,要使用這一模型必須做如下實現:

    1、FormBean繼承org.apache.struts.validator.ValidatorForm而不是ActionForm

    2、不覆蓋validate方法

    3、創建validator-rules.xml及validation.xml文件
    validator-rules.xml定義了可用來配置的校驗邏輯,如:

      1<form-validation>
      2   <global>
      3      <validator name="required"
      4            classname="org.apache.struts.validator.FieldChecks"
      5               method="validateRequired"
      6         methodParams="java.lang.Object,
      7                       org.apache.commons.validator.ValidatorAction,
      8                       org.apache.commons.validator.Field,
      9                       org.apache.struts.action.ActionMessages,
     10                       org.apache.commons.validator.Validator,
     11                       javax.servlet.http.HttpServletRequest"
     12                  msg="errors.required"/>
     13      <validator name="requiredif"
     14                 classname="org.apache.struts.validator.FieldChecks"
     15                 method="validateRequiredIf"
     16                 methodParams="java.lang.Object,
     17                               org.apache.commons.validator.ValidatorAction,
     18                               org.apache.commons.validator.Field,
     19                               org.apache.struts.action.ActionMessages,
     20                               org.apache.commons.validator.Validator,
     21                               javax.servlet.http.HttpServletRequest"
     22                 msg="errors.required"/>
     23      <validator name="validwhen"
     24          msg="errors.required"
     25                 classname="org.apache.struts.validator.validwhen.ValidWhen"
     26                 method="validateValidWhen"
     27                 methodParams="java.lang.Object,
     28                       org.apache.commons.validator.ValidatorAction,
     29                       org.apache.commons.validator.Field,
     30                       org.apache.struts.action.ActionMessages,
     31                       org.apache.commons.validator.Validator,
     32                       javax.servlet.http.HttpServletRequest"/>
     33      <validator name="minlength"
     34            classname="org.apache.struts.validator.FieldChecks"
     35               method="validateMinLength"
     36         methodParams="java.lang.Object,
     37                       org.apache.commons.validator.ValidatorAction,
     38                       org.apache.commons.validator.Field,
     39                       org.apache.struts.action.ActionMessages,
     40                       org.apache.commons.validator.Validator,
     41                       javax.servlet.http.HttpServletRequest"
     42              depends=""
     43                  msg="errors.minlength"
     44           jsFunction="org.apache.commons.validator.javascript.validateMinLength"/>
     45      <validator name="maxlength"
     46            classname="org.apache.struts.validator.FieldChecks"
     47               method="validateMaxLength"
     48         methodParams="java.lang.Object,
     49                       org.apache.commons.validator.ValidatorAction,
     50                       org.apache.commons.validator.Field,
     51                       org.apache.struts.action.ActionMessages,
     52                       org.apache.commons.validator.Validator,
     53                       javax.servlet.http.HttpServletRequest"
     54              depends=""
     55                  msg="errors.maxlength"
     56           jsFunction="org.apache.commons.validator.javascript.validateMaxLength"/>
     57      <validator name="mask"
     58            classname="org.apache.struts.validator.FieldChecks"
     59               method="validateMask"
     60         methodParams="java.lang.Object,
     61                       org.apache.commons.validator.ValidatorAction,
     62                       org.apache.commons.validator.Field,
     63                       org.apache.struts.action.ActionMessages,
     64                       org.apache.commons.validator.Validator,
     65                       javax.servlet.http.HttpServletRequest"
     66              depends=""
     67                  msg="errors.invalid"/>
     68      <validator name="byte"
     69            classname="org.apache.struts.validator.FieldChecks"
     70               method="validateByte"
     71         methodParams="java.lang.Object,
     72                       org.apache.commons.validator.ValidatorAction,
     73                       org.apache.commons.validator.Field,
     74                       org.apache.struts.action.ActionMessages,
     75                       org.apache.commons.validator.Validator,
     76                       javax.servlet.http.HttpServletRequest"
     77              depends=""
     78                  msg="errors.byte"
     79       jsFunctionName="ByteValidations"/>
     80      <validator name="short"
     81            classname="org.apache.struts.validator.FieldChecks"
     82               method="validateShort"
     83         methodParams="java.lang.Object,
     84                       org.apache.commons.validator.ValidatorAction,
     85                       org.apache.commons.validator.Field,
     86                       org.apache.struts.action.ActionMessages,
     87                       org.apache.commons.validator.Validator,
     88                       javax.servlet.http.HttpServletRequest"
     89              depends=""
     90                  msg="errors.short"
     91       jsFunctionName="ShortValidations"/>
     92      <validator name="integer"
     93            classname="org.apache.struts.validator.FieldChecks"
     94               method="validateInteger"
     95         methodParams="java.lang.Object,
     96                       org.apache.commons.validator.ValidatorAction,
     97                       org.apache.commons.validator.Field,
     98                       org.apache.struts.action.ActionMessages,
     99                       org.apache.commons.validator.Validator,
    100                       javax.servlet.http.HttpServletRequest"
    101              depends=""
    102                  msg="errors.integer"
    103       jsFunctionName="IntegerValidations"/>
    104      <validator name="long"
    105            classname="org.apache.struts.validator.FieldChecks"
    106               method="validateLong"
    107         methodParams="java.lang.Object,
    108                       org.apache.commons.validator.ValidatorAction,
    109                       org.apache.commons.validator.Field,
    110                       org.apache.struts.action.ActionMessages,
    111                       org.apache.commons.validator.Validator,
    112                       javax.servlet.http.HttpServletRequest"
    113              depends=""
    114                  msg="errors.long"/>
    115      <validator name="float"
    116            classname="org.apache.struts.validator.FieldChecks"
    117               method="validateFloat"
    118         methodParams="java.lang.Object,
    119                       org.apache.commons.validator.ValidatorAction,
    120                       org.apache.commons.validator.Field,
    121                       org.apache.struts.action.ActionMessages,
    122                       org.apache.commons.validator.Validator,
    123                       javax.servlet.http.HttpServletRequest"
    124              depends=""
    125                  msg="errors.float"
    126       jsFunctionName="FloatValidations"/>
    127      <validator name="double"
    128            classname="org.apache.struts.validator.FieldChecks"
    129               method="validateDouble"
    130         methodParams="java.lang.Object,
    131                       org.apache.commons.validator.ValidatorAction,
    132                       org.apache.commons.validator.Field,
    133                       org.apache.struts.action.ActionMessages,
    134                       org.apache.commons.validator.Validator,
    135                       javax.servlet.http.HttpServletRequest"
    136              depends=""
    137                  msg="errors.double"/>
    138      <validator name="date"
    139            classname="org.apache.struts.validator.FieldChecks"
    140               method="validateDate"
    141         methodParams="java.lang.Object,
    142                       org.apache.commons.validator.ValidatorAction,
    143                       org.apache.commons.validator.Field,
    144                       org.apache.struts.action.ActionMessages,
    145                       org.apache.commons.validator.Validator,
    146                       javax.servlet.http.HttpServletRequest"
    147              depends=""
    148                  msg="errors.date"
    149       jsFunctionName="DateValidations"/>
    150      <validator name="intRange"
    151            classname="org.apache.struts.validator.FieldChecks"
    152               method="validateIntRange"
    153         methodParams="java.lang.Object,
    154                       org.apache.commons.validator.ValidatorAction,
    155                       org.apache.commons.validator.Field,
    156                       org.apache.struts.action.ActionMessages,
    157                       org.apache.commons.validator.Validator,
    158                       javax.servlet.http.HttpServletRequest"
    159              depends="integer"
    160                  msg="errors.range"/>
    161      <validator name="floatRange"
    162            classname="org.apache.struts.validator.FieldChecks"
    163               method="validateFloatRange"
    164         methodParams="java.lang.Object,
    165                       org.apache.commons.validator.ValidatorAction,
    166                       org.apache.commons.validator.Field,
    167                       org.apache.struts.action.ActionMessages,
    168                       org.apache.commons.validator.Validator,
    169                       javax.servlet.http.HttpServletRequest"
    170              depends="float"
    171                  msg="errors.range"/>
    172      <validator name="doubleRange"
    173            classname="org.apache.struts.validator.FieldChecks"
    174               method="validateDoubleRange"
    175         methodParams="java.lang.Object,
    176                       org.apache.commons.validator.ValidatorAction,
    177                       org.apache.commons.validator.Field,
    178                       org.apache.struts.action.ActionMessages,
    179                       org.apache.commons.validator.Validator,
    180                       javax.servlet.http.HttpServletRequest"
    181              depends="double"
    182                  msg="errors.range"/>
    183      <validator name="creditCard"
    184            classname="org.apache.struts.validator.FieldChecks"
    185               method="validateCreditCard"
    186         methodParams="java.lang.Object,
    187                       org.apache.commons.validator.ValidatorAction,
    188                       org.apache.commons.validator.Field,
    189                       org.apache.struts.action.ActionMessages,
    190                       org.apache.commons.validator.Validator,
    191                       javax.servlet.http.HttpServletRequest"
    192              depends=""
    193                  msg="errors.creditcard"/>
    194      <validator name="email"
    195            classname="org.apache.struts.validator.FieldChecks"
    196               method="validateEmail"
    197         methodParams="java.lang.Object,
    198                       org.apache.commons.validator.ValidatorAction,
    199                       org.apache.commons.validator.Field,
    200                       org.apache.struts.action.ActionMessages,
    201                       org.apache.commons.validator.Validator,
    202                       javax.servlet.http.HttpServletRequest"
    203              depends=""
    204                  msg="errors.email"/>
    205      <validator name="url"
    206            classname="org.apache.struts.validator.FieldChecks"
    207               method="validateUrl"
    208         methodParams="java.lang.Object,
    209                       org.apache.commons.validator.ValidatorAction,
    210                       org.apache.commons.validator.Field,
    211                       org.apache.struts.action.ActionMessages,
    212                       org.apache.commons.validator.Validator,
    213                       javax.servlet.http.HttpServletRequest"
    214              depends=""
    215                  msg="errors.url"/>
    216     <!--
    217       This simply allows struts to include the validateUtilities into a page, it should
    218       not be used as a validation rule.
    219     -->
    220     <validator name="includeJavaScriptUtilities"
    221            classname=""
    222               method=""
    223         methodParams=""
    224              depends=""
    225                  msg=""
    226           jsFunction="org.apache.commons.validator.javascript.validateUtilities"/>           
    227      <validator name="codeinput"
    228            classname="consultII.web.utils.MyValidator"
    229               method="validateCodeInput"
    230         methodParams="java.lang.Object,
    231                       org.apache.commons.validator.ValidatorAction,
    232                       org.apache.commons.validator.Field,
    233                       org.apache.struts.action.ActionMessages,
    234                       javax.servlet.http.HttpServletRequest"
    235                  msg="errors.code"/>
    236      <validator name="userinfo"
    237            classname="consultII.web.utils.MyValidator"
    238               method="validateUserInfo"
    239         methodParams="java.lang.Object,
    240                       org.apache.commons.validator.ValidatorAction,
    241                       org.apache.commons.validator.Field,
    242                       org.apache.struts.action.ActionMessages,
    243                       javax.servlet.http.HttpServletRequest"
    244                  msg="errors.info"/>
    245   </global>
    246</form-validation>

    該配置文件的具體格式請查閱Struts的官方文檔。可以看出其中對很多常用的校驗邏輯進行了封裝,比如數字校驗(92行到103行),長度校驗(33行到56行)等。

    而validation.xml則是Validator的核心,其中可對各個FormBean中需要校驗字段及校驗邏輯進行靈活的配置:

     1<form-validation>
     2   <formset>
     3      <form name="login">
     4         <field property="username" depends="required"/>
     5         <field property="password" depends="required"/>
     6         <field property="input" depends="required,codeinput"/>
     7      </form>
     8      <form name="search">
     9        <field property="keyword" depends="required"/>
    10      </form>
    11      <form name="signin">
    12         <field property="username" depends="required"/>
    13         <field property="password" depends="required"/>
    14         <field property="passagain" depends="required"/>
    15         <field property="question" depends="required,userinfo"/>
    16         <field property="answer" depends="required,userinfo"/>
    17         <field property="age" depends="required,integer"/>
    18         <field property="input" depends="required,codeinput"/>
    19         <field property="email" depends="email"/>
    20      </form>
    21      <form name="ask">
    22         <field property="content" depends="required"/>
    23      </form>
    24   </formset>
    25</form-validation>
    26

    具體格式可查閱官方文檔,如上例,3到5行定義了需要對名為“loging”的FormBean的“username”、“password”分別進行“required”校驗(即必填字段)。校驗邏輯之間可以組合,如第6行的“required,codeinput”,定義了先進行required校驗,通過了再進行codeinput校驗。

    與在validate方法內進行校驗相比,使用Validator的優勢就很明顯了,可重用(從上述xml文件可以看出對很多字段都進行了required校驗);可靈活配置、擴展,只需修改validation.xml文件就可以改變校驗邏輯。

    posted on 2006-03-07 17:53 ^ Mustang ^ 閱讀(5297) 評論(0)  編輯  收藏 所屬分類: Struts
    主站蜘蛛池模板: 亚洲精品视频免费观看| 色欲国产麻豆一精品一AV一免费 | www.黄色免费网站| 四虎在线视频免费观看视频| 久久久精品2019免费观看| 午夜免费福利片观看| 永久在线免费观看| 亚洲黄色免费网址| 成人无码区免费A片视频WWW | 黄色一级毛片免费| 日本高清免费中文在线看| 一级做a免费视频观看网站| 成人A毛片免费观看网站| 黄网站免费在线观看| 99在线免费观看视频| 毛片高清视频在线看免费观看| 女人与禽交视频免费看| 免费日本黄色网址| 日韩一卡2卡3卡4卡新区亚洲| 亚洲国产精品无码AAA片| 亚洲高清在线mv| 亚洲国产AV无码一区二区三区| 美女扒开尿口给男人爽免费视频 | 亚洲色偷偷偷综合网| 国产成人亚洲精品电影| 国产男女爽爽爽免费视频| 久草免费手机视频| 国产成在线观看免费视频| 日本牲交大片免费观看| 久久乐国产精品亚洲综合| 久久亚洲日韩精品一区二区三区| 亚洲香蕉久久一区二区三区四区| 国产综合成人亚洲区| 免费无码黄网站在线看| 久久经典免费视频| 亚洲成aⅴ人片久青草影院| 亚洲AV无码久久寂寞少妇| 亚洲欧洲日本在线观看| 一级毛片在线免费播放| 最近中文字幕大全免费视频 | 99爱在线精品免费观看|