posts - 42, comments - 7, trackbacks - 0, articles - 1

          Struts的數(shù)據(jù)驗(yàn)證

          Posted on 2007-10-17 20:57 TuringJava 閱讀(310) 評(píng)論(0)  編輯  收藏 所屬分類: Structs
          Struts中的驗(yàn)證框架有三種方法:
          1、ActionForm的代碼驗(yàn)證。
          2、Action的代碼驗(yàn)證。
          3、結(jié)合commons-validator.jar的驗(yàn)證框架。

          1。ActinForm的代碼驗(yàn)證。
                   重寫ActionForm中的validate方法,在該方法中定義驗(yàn)證的規(guī)則,如果出錯(cuò)可以用ActionError或者ActionMessages封裝錯(cuò)誤進(jìn)行出錯(cuò)處理。
          代碼示例:
          public ActionErrors validate(ActionMapping mapping,HttpServletRequest request)
           {
            ActionErrors errors = new ActionErrors();
            if (ddd == null || ddd.equals(""))
            {
             errors.add("username", new ActionError("error.username","用戶名"));
                      //error.username對(duì)于資源文件的key.用戶名是對(duì)應(yīng)資源文件的第一個(gè)參數(shù)
            }
            if (password == null || password.equals(""))
            {
             errors.add("password", new ActionError("error.password","密碼"));
            }
            if (vercode == null || vercode.equals(""))
            {
             errors.add("vercode", new ActionError("error.vercode","驗(yàn)證碼"));
            }
            return errors;
           }
          2。Action的代碼驗(yàn)證
                  實(shí)際上就是在Action的Excute方法的前面加上數(shù)據(jù)驗(yàn)證的部分代碼。
                   代碼示例:
              public ActionForward execute(ActionMapping mapping,ActionForm form,
                  HttpServletRequest request, HttpServletResponse response)throws Exception
              {
                  LoginForm loginForm = (LoginForm)form;
                  String username = loginForm.getUsername();
                  if (username == null || username.equals("") )
                  {
                      request.setAttribute("errors","nameNotNull");
                      return mapping.findForward("input");
                  }
                  else
                  {
                      return mapping.findForward("success");
                  }
              }
                  注:該方法的缺點(diǎn)在于在excute方法中添加驗(yàn)證代碼使得代碼比較混亂;對(duì)于靜態(tài)的驗(yàn)證應(yīng)該盡量在客戶端完成,而不應(yīng)該提交到服務(wù)器端,這樣加大的系統(tǒng)的負(fù)荷和響應(yīng)速度。

          3。commons-validator.jar的驗(yàn)證框架
                  通用操作:增加校驗(yàn)資源;利用validatorPlugIn加載校驗(yàn)資源;ActionForm使用ValiadateForm的子類。
            1) 繼承ValidateForm的驗(yàn)證
                  (1) Struts 的ActionForm必須是ValidatorForm的子類。
                  (2) 編寫表單域時(shí)必須滿足校驗(yàn)規(guī)則。校驗(yàn)規(guī)則都由規(guī)則文件控制,規(guī)則文件有以

                  下兩個(gè)。

              * validator-rules.xml 文件

              * validation.xml 文件

              第一個(gè)文件可在Struts 的解壓縮后的文件夾的lib 下找到,將該文件復(fù)制到WEB-INF ;

           而validation.xml 文件則是屬于該項(xiàng)目的校驗(yàn)文件,負(fù)責(zé)定義每個(gè)表單域必須滿足的規(guī)則,以及規(guī)則的詳細(xì)說(shuō)明。
          validator.xml示例:

          <?xml version="1.0" encoding="iso-8859-1"?>
          <!-- 校驗(yàn)規(guī)則文件的文件頭-->
          <!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>
          <!-- 定義需要校驗(yàn)的表單,此處的name必須與struts-config.xrnl中定義
                                的AcitonForm的名字一致-->
           <form name="loginForm">
           <!-- 每個(gè)field元素定義一個(gè)表單域,必須滿足怎樣的規(guī)則此處定義必須滿足兩個(gè)規(guī)則:必填,匹配正則表達(dá)式-->
            <field property="username" depends="required,mask">
            <!--定義出錯(cuò)字符串的第一個(gè)參數(shù)的值…-->
                <arg key="loginForm.username" position="0"/>
             <!--定義正則表達(dá)式-->
             <var>
               <var-name>mask</var-name>
               <var-value>^[a-zA-Z]+$</var-value>
             </var>
            </field>
            <!-- 定義pass域,需要滿足必填規(guī)則-->
            <field property="pass" depends="required">
                <arg key="loginForm.pass" position="0"/>
            </field>
            <!--定義rpass域,需要滿足必填規(guī)則 -->
            <field property="rpass" depends="required,validwhen">
                <arg key="loginForm.rpass" position="0"/>
                <arg key="loginForm.pass" position="1"/>
             <msg name="validwhen" key="loginForm.valid"/>
             <!--定義必須滿足的有效條件-->
             <var>
               <var-name>test</var-name>
               <!-- 設(shè)定有效條件,此項(xiàng)為空,或者此項(xiàng)與pass域相等-->
               <var-value>((*this*==null)or(*this*==pass))</var-value>
             </var>
            </field>
            <field property="mail" depends="required,email">
                <arg key="loginForm.email" position="0"/>
            </field>
           </form>

            </formset>

          </form-validation>

                    

          (3)指定如果不滿足校驗(yàn)規(guī)則時(shí),系統(tǒng)將返回到哪個(gè)頁(yè)面,可通過(guò)struts-config.xml

          文件指定即可。在struts-config.xml 文件中配置action 時(shí), action 有個(gè)input 屬性,該屬

          性用于指定不滿足規(guī)則時(shí)返回的頁(yè)面。另外,還應(yīng)為 action 元素增加 validate= "true"

          屬性。


          主站蜘蛛池模板: 化州市| 荆门市| 米脂县| 巴中市| 东乌| 泗阳县| 商河县| 光泽县| 皮山县| 馆陶县| 拉孜县| 南岸区| 进贤县| 古交市| 黄平县| 桦川县| 易门县| 高淳县| 渝中区| 乌兰察布市| 河北省| 景德镇市| 宁化县| 永胜县| 东丽区| 分宜县| 乐昌市| 上思县| 巴彦淖尔市| 龙山县| 三原县| 浑源县| 乌拉特后旗| 金乡县| 湖北省| 荆州市| 永嘉县| 仙游县| 运城市| 陆良县| 化州市|