熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Struts1.x系列教程(10):Validator驗證框架入門

2013-11-23 20:04:58  來源: Java開源技術 

  Validator框架的優勢

  Validator框架是一個Struts插件最初由David Winterfeldt設計並實現Validator框架從Struts 時代就可以使用但那時Validator框架只是被捐助的一個jar包Apache組織為了使開發人員更方便地使用Validator框架決定從Struts開始將Validator框架作為Struts的一部分同Struts一起發布

  Validator框架可以在XML文件中配置驗證規則和驗證對象因此使用Validator框架可以無需在ActionForm的子類中覆蓋validate方法就可以很方便地驗證客戶端的提交數據由於Validator框架內置了很多預定義的驗證機制如驗證某個屬性是否存在驗證EMail是否合法等所以在一般情況下只需要配置XML文件就可以滿足我們的驗證需求

  在使用Validator框架時就會發現這種方式要比直接使用validate方法進行驗證會給我們帶來如下的好處

    更容易維護 由於驗證信息可以被放置在同一個配置文件中因此我們可以更容易地來維護這些驗證信息

    標准化由於很多簡單的驗證都是相同的如用戶名和密碼都要求由字母數字以及下劃下組成如果將這些驗證都寫在validate方法中對這些驗證進行標准化非常困難而在Validator框架中的這些驗證機制都是預先定義的因此標准化相同的驗證對於Validator框架來說將是一件非常輕松的事

    避免重造輪子雖然一些驗證很簡單但如果想正確實現它們也是非常困難的一個典型的例子是驗證EMail地址的格式如果這個驗證要想完美無缺就必須按著RFC規范的要求來驗證EMail地址而如果我們使用Validator框架就無需再重造輪子來驗證EMail地址了

    減少重復代碼的數量由於Validator框架提供了很多預定義的驗證因此我們可以避免自己寫很多重復的代碼進行驗證當然我們也可以將大量使用的驗證封裝在類的方法中這些雖然可以避免大量的重復勞動但這就意味著我們團隊的新成員要使用這些被封裝的驗證方法之前必須先學習它們而最糟糕的情況是很多開發人員可能會忘記使用這些由其他成員實現的驗證庫而自己重新編寫具有同樣功能的驗證庫當然這一切如果使用Validator框架就都可以得到解決

    客戶端和服務端驗證自動切換我們只需要簡單地在JSP頁面中放一個單獨的<htmljavascript/>元素就可以將服務端的驗證轉換為客戶端驗證(基於JavaScript的驗證)

  雖然Validator框架的預定義驗證已經可以滿足大多數的驗證需求了但在某些特殊情況下這些預定義驗證就無法滿足我們的需求了為此Validator框架也為開發人員提供了擴展驗證機制的功能這也使得Validator框架可以完成更復雜的驗證工作

  <!——[endif]——>

  配置和使用Validator框架

    安裝Validator框架

  由於Validator是Struts的一個插件因此就需要在strutsconfigxml文件中按著Struts插件的方式來安裝Validator框架打開strutsconfigxml文件在<strutsconfig>元素中加入一個<plugin>子元素如下面的代碼所示

   <plugin className=orgapachestrutsvalidatorValidatorPlugIn>
    <setproperty property=pathnames value=/WEBINF/validatorrulesxml /WEBINF/validatorxml />
</plugin>

  其中<setproperty>元素設置了插件中使用的pathnames屬性的值在pathnames屬性值中包含了兩個xml文件

  ()validatorrulesxml在這個文件中聲明了Validator框架的預定義驗證這個文件可以在Struts的發行包的lib目錄中可以找到這個文件在使用MyEclipse為Web工程添加Struts功能後會自動將這個文件加到WEBINF目錄中

  ()validatorxml這個文件定義了要驗證的對象實際上在這個文件中包含了一個或多個ActionForm的子類及其要驗證的屬性和驗證規則因此這個文件就相當於validate方法在Validator框架中可以有多個定義驗證對象的xml文件(可以將不同的ActionForm的子類分散到不同的xml文件中)中間用逗號()隔開如下面的代碼所示<!——[endif]——>

   <plugin className=orgapachestrutsvalidatorValidatorPlugIn>
    <setproperty property=pathnames value=/WEBINF/validatorrulesxml /WEBINF/validatorxml
                                             /WEBINF/validatorxml /WEBINF/validatorxml />
</plugin>

    使用Validator框架的一個例子

  在本節將舉一個例子來演示如何使用Validator框架來驗證數據我們需要按著如下的六步來完成這個例子

  【第步】建立FirstValidatorForm類(ValidatorForm的子類)

  在<samples工程目錄>\src\actionform目錄中建立一個FirstValidatorFormjava文件代碼如下

     package actionform;
  import orgapachestrutsvalidatorValidatorForm;
  public class FirstValidatorForm extends ValidatorForm  // 必須從ValidatorForm繼承
  {
      private String name;
      private String age;
      private String email;
      public String getName()
      {
          return name;
      }
      public void setName(String name)
      {
          thisname = name;
      }
      public String getEmail()
      {
          return email;
      }
      public void setEmail(String email)
      {
          thisemail = email;
      }
      public String getAge()
      {
          return age;
      }
      public void setAge(String age)
      {
          thisage = age;
      }
  }

  要注意的是要想使用Validator框架驗證數據Form類就必須從ValidatorForm繼承而不能從ActionForm繼承這是因為ValidatorForm類是從ActionForm繼承的在ValidatorForm類中已經覆蓋了validate方法來自動進行驗證工作因此我們在ValidatorForm的子類中就不用寫validate方法了

  <!——[endif]——>

  【第步】建立ValidatorAction類(Action的子類)

  在<samples工程目錄>\src\action目錄中建立一個ValidatorActionjava文件代碼如下

     package action;
  import javaxservlethttp*;
  import orgapachestrutsaction*;
  public class ValidatorAction extends Action
  {
      public ActionForward execute(ActionMapping mapping ActionForm form
              HttpServletRequest request HttpServletResponse response)
      {
          responsesetCharacterEncoding(GBK);
          try
          {
              responsegetWriter()println(驗證成功!);
          }
          catch (Exception e)
          {
          }
          return null;
      }
  }

  ValidatorAction類是一個空的Struts動作類(除了輸出一行驗證成功!字符串)這個動作是為了正常運行含有Struts元素的JSP程序所編寫的在以後的代碼中會經常使用到這個Struts動作類

  【第步】配置strutsconfigxml文件

  配置FirstValidatorForm和ValidatorAction的代碼如下所示

   <formbean name=firstValidatorForm type= actionformFirstValidatorForm />
<action name=firstValidatorForm path=/firstValidator scope=request type= actionValidatorAction  input=/firstValidatorjsp/>

  其中firstValidatorjsp是用戶錄入信息的界面也是顯示錯誤信息的界面

  【第步】建立firstValidatorjsp在Web根目錄建立一個firstValidatorjsp文件代碼如下<!——[endif]——>

     <%@ page pageEncoding=GBK%>
  <%@ taglib uri=html prefix=html%>
  <html>
    <head>
      <title>第一個Validator程序</title>
    </head>
    <body>
      <html:form action=firstValidator >
         姓  名
<html:text property=name />&nbsp;&nbsp;<font color=red><html:errors property=name/></font><p>
         年  齡
<html:text property=age/>&nbsp;&nbsp;<font color=red><html:errors property=age/></font><p>
       EMail
<html:text property=email/>&nbsp;&nbsp;<font color=red><html:errors property=email/></font><p>
              <html:submit value=提交/>
      </html:form>  
    </body>
  </html>

  從firstValidatorjsp中可以看出不管是否使用Validator框架進和驗證對於JSP代碼來說是完全一樣的仍然是使用<htmlerrors>元素來顯示錯誤信息但要注意在使用Validator框架時<htmlerrors>標簽的property屬性的值就是所對應ValidatorForm的子類的屬性名

  【第步】配置validatorxml文件在本例中只使用了一個XML文件(validatorxml)來配置要驗證的對象validatorxml的代碼如下<!——[endif]——>

     <?xml version= encoding=GBK ?>
  <!DOCTYPE formvalidation PUBLIC
   //Apache Software Foundation//DTD Commons Validator Rules Configuration //EN
            ___dtd>
  <formvalidation>
      <formset>
          <form name=firstValidatorForm>
              <field property=name depends=requiredmaxlengthminlengthmask>
                  <msg name=required key=errornameblank />
                  <msg name=minlength key=errornameminLength />
                  <msg name=maxlength key=errornamemaxLength />
                  <msg name=mask key=errornamealphanum />
  
                  <arg name=minlength key=${var:minlength} position= resource=false />
                  <arg name=maxlength key=${var:maxlength} position= resource=false />
                  <var>
                      <varname>minlength</varname>
                      <varvalue></varvalue>
                  </var>
                  <var>
                      <varname>maxlength</varname>
                      <varvalue></varvalue>
                  </var>
                  <var>
                      <varname>mask</varname>
                      <varvalue>^[azAZ]*$</varvalue>
                  </var>
              </field>
              <field property=age depends=requiredintegerintRange>
                  <msg name=required key=errorageblank />
                  <msg name=integer key=errorageinteger />
                  <msg name=intRange key=errorageintRange />
  
                  <arg name=intRange key=${var:min} position= resource=false />
                  <arg name=intRange key=${var:max} position= resource=false />
                  <var>
                      <varname>min</varname>
                      <varvalue></varvalue>
                  </var>
                  <var>
                      <varname>max</varname>
                      <varvalue></varvalue>
                  </var>  
              </field>
              <field property=email depends=requiredemail>
                  <msg name=required key=erroremailblank />
                  <msg name=email key=erroremailinvalid />
              </field>
          </form>
      </formset>
  </formvalidation>

  validatorxml文件中的所有配置都放到<formvalidation>元素中在<formvalidation>元素中有一個<formset>子元素這個元素可以定義多個<Form>元素這個元素用來定義要驗證的ValidatorForm類的子類其中name屬性值就是<formbean>元素中的name屬性值

  <field>元素用來定義某個屬性的約束條件如第一個<field>元素定義了name屬性必須存在(required)必須要滿足最小長度(minlength)和最大長度(maxlength)以及還要通過mask所指的正則表達式的驗證

  <msg>元素用來定義出錯信息在屬性文件中的Key(所有的出錯信息都在屬性文件中)<arg>元素用來向出錯信息中的參數傳遞參數值<var>元素用來定義變量名和變量值

  【第步】在ErrorDescriptionproperties文件中添加錯誤信息

  打開ErrorDescriptionproperties文件在文件的後面添加如下的內容

     errornameblank = 姓名不能為空
  errornameminLength = 姓名的長度不能小於{}
  errornamemaxLength = 姓名的長度不能大於{}
  errornamealphanum = 姓名必須由字母和數字組成
  errorageblank = 年齡不能為空
  errorageinteger = 年齡必須為數字
  errorageintRange = 年齡必須在{}和{}之間

  啟動Tomcat在IE中輸入如下的URL來測試程序

  //localhost/samples/%firstValidatorjsp

  在輸入一些錯誤信息後點擊提交按鈕將出現類似下圖的效果

  


From:http://tw.wingwit.com/Article/program/Java/ky/201311/27910.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.