要在Struts項目中使用Validator功能首先需要配置Struts項目使其支持Validator框架Struts通過一個插件(Plugin)來使Struts項目支持Validator這個Plugin由Struts默認提供用戶也可以自己開發自己的Validator PluginStruts默認提供的Plugin為:
orgapachestrutsvalidatorValidatorPlugIn
用戶必須在strutsconfigxml 文件中配置這個Plugin才能使Struts項目支持Validator配置方法比較簡單通過任何文本編輯器打開strutsconfigxml 文件在這個文件的末尾加上下面的代碼重新啟動JEE服務器就可以實現對Validator的支持了
<plugin className=orgapachestrutsvalidatorValidatorPlugIn>
<setproperty property=pathnames
value=/WEBINF/validatorrulesxml/WEBINF/validationxml />
</plugin>
在Jbuilder開發環境中可以通過下面的方法使Struts項目支持Validator框架
在項目管理器中用鼠標右鍵點擊Web項目(在我們的項目中是 WebModule )
選擇菜單的 Properties…菜單項
在彈出的對話框的左邊樹型結構中選中 web 節點
在右邊的 JSP/Servlet frameworks 框中勾選 sturts 節點以及 struts 節點下的 validation 子節點
點擊 OK 按鈕完成配置
檢查 strutsconfigxml 文件可以看到配置文件裡已經加入了Validator Plugin
Validatorrulesxml文件
Validatorrulesxml文件是校驗器的定義文件指定了每一個校驗器的基本信息和執行校驗的JavaScript代碼Struts默認提供了十四個校驗器這些校驗器可以滿足我們平時項目開發中碰到的絕大多數的輸入校驗要求如果這些校驗器不能滿足用戶的校驗要求那麼我們也可以開發自己的校驗器我們項目主就實現了一個校驗密碼的一致性的Validator
Struts提供的校驗器包括Required Validator Requiredif Validator MinLength Validator MaxLength Validator Mask Validator Byte Validator Short Validaotr Integer Validator Long Validator Float Validator Double Validator Date Validator Range Validator IntRange Validator FloatRange Validator CrediteCard Validator Email Validator 等校驗器後面我將講述一些比較常用的校驗器的使用方法
Validatorxml 文件
Validatorxml 文件用來定義用戶需要校驗的每一個JSP Form中的每一個字段的校驗規則這個文件是我們在Struts項目開發中使用Validator框架所需要配置的文件這個文件的根節點是<formvalidator>在根節點下的<formset>節點的<form>子節點就對應了我們在開發JSP文件是所定義的Form標記也對應這strutsconfigxml中的form bean的定義一個<form>節點由多個<field>節點組成每個<field>節點的結構大概如下:
<field property=password depends=requiredminlengthtwofields>
<msg name=required key=testrequired/>
<msg name=minlength key=testminlength/>
<msg name=twofields key=testtwofields/>
<arg key=testpassword />
<arg name=minlength key=${var:minlength} resource=false />
<var>
<varname>minlength</varname>
<varvalue></varvalue>
</var>
<var>
<varname>secondProperty</varname>
<varvalue>password</varvalue>
</var>
</field>
其中一個<Field>對應於一個Form Bean的一個Field<Field>標記的property屬性說明了這個Field對應的Form Bean的Field名稱這個名稱要跟strutsconfigxml文件中的<formbean>中定義的名字一致depends屬性說明了這個Field依賴於那些校驗器的校驗可以使用多個校驗器各個校驗器之間使用逗號隔開<msg>標記說明了當這個Field通不過校驗的時候向用戶提供的錯誤信息name屬性指定了對應的校驗器key屬性指定了定義在ApplicationResourcesproperties文件中的錯誤信息<arg>和<arg>是傳遞給校驗器的參數<var>標記定義了參數的名字和參數值上面的這個例子說明了password字段由RequiredMinlengthTwofields校驗器進行校驗指定了這個Field不能為空而且最小長度不能小於為並且必須和同一個Form中的另一個名為password的字段相同如果用戶的輸入不能滿足這些要求校驗器將會拋出異常
下面開始將怎麼在這個配置文件中配置各個校驗器實現對form中的多中類型的field進行校驗
Required Validator
這個校驗器用來校驗Form的輸入數據不能為空如果某一個Form 的 Field 依賴於這個校驗器那麼如果用戶在Form中沒有輸入這個Field對應的輸入數據時Required校驗器將會觸發一個Exception這個Exception的錯誤信息可以在頁面或者服務端被捕捉到
例子:
<field property=test depends=required>
<msg name=required key=testrequired/>
<arg key=testtestFielddisplayName/>
</field>
上面的例子說明了test字段的校驗規則是不能為空在ApplicationResourcesproperties中的相應的定義信息可能是下面這樣的情況:
TesttestFielddisplayName =測試字段 #上面在<arg>標記中定義的key= testtestField 對應這個信息
Testrequired={} 不能為空請重新輸入 #在上面定義的<msg>標記對應這個信息
如果Validator校驗到用戶沒有輸入test這個字段就會將testtestField對應的信息作為testrequired的參數傳遞給校驗器如果在JSP頁面中捕捉了錯誤信息錯誤信息將會是下面的這個形式:
測試字段 不能為空請重新輸入
Mask Validator
Mask Validator校驗用戶輸入的數據是否遵照一定的規則這個規則由開發者在validatorxml文件中定義
例子:
<field property=postalCode depends=mask>
<arg key=testpostalCodedisplayname/>
<arg name=mask key=${var:mask} resource=false
<var>
<varname>mask</varname>
<varvalue>^d*$</varvalue>
</var>
</field>
上面的<arg>標記說明了這個校驗的第二個參數是定義在下面的<var>標記的名為mask的值<varvalue>的值說明了這個字段必須是以數字開頭以任意數字字符結尾的一個串
Range Validator
這個校驗器校驗字段是否在一個數字范圍內
例子:
<field property=age depends=range>
<msg name=range key=testrang/>
<arg key=testage/>
<arg name=range key=${var:min} resource=false/>
<arg name=range key=${var:max} resource=false/>
<var>
<varname>min</varname>
<varvalue></varvalue>
</var>
<var>
<varname>max</varname>
<varvalue></varvalue>
</var>
</field>
Range Validator需要三個參數(arg)第一個參數arg是指定這個字段的名字第二個和第三個參數指定范圍的最大和最小值分別的名稱是max和min
Maxlength Validator
Maxlength校驗器校驗一個字符串的最大長度它需要兩個參數arg說明字段的名稱arg說明最大長度
例子:
<field property=password depends=maxlength>
<msg name=maxlength key=testminlength/>
<arg key=testpassword />
<arg name=maxlength key=${var:maxlength} resource=false />
<var>
<varname>maxlength</varname>
<varvalue></varvalue>
</var>
</field>
Minlength Validator
這個校驗器類似於上面的Maxlength Validator參數一樣校驗規則也一樣只是作為參數的變量名字為minlength
<field property=password depends=minlength>
<msg name=minlength key=testminlength/>
<arg key=testpassword />
<arg name=minlength key=${var:minlength} resource=false />
<var>
<varname>minlength</varname>
<varvalue></varvalue>
</var>
</field>
Email Validator
這個校驗器校驗電子郵件字段當用戶輸入的電子郵件地址不合法的時候校驗器拋出異常
例子:
<field property=email depends=requiredemail>
<msg name=required key=testrequired/>
<msg name=email key=testerroremail/>
<arg key=testemail/>
</field>
Form Bean的編寫
要使用Struts的Validator框架進行自動校驗的Form Bean不能繼承自普通的ActionForm必須繼承自ValidatorForm或者ValidatorActionForm我們項目組都是繼承自ValidatorForm
ValidatorForm根據strutsconfigxml文件中的action的name屬性為當前form的調用相應的驗證器因此在validationxml中的<formbean>元素的名稱屬性(name)應該與<action>的name屬性值相匹配
ValidatorActionForm使用strutsconfigxml中action的path屬性所以path屬性的值相應的應該與validationxml中的Form的name屬性匹配
Strutsconfigxml文件的配置
要使用Validator框架的自動校驗機制還必須在Strutsconfigxml文件中作相應的配置除了前面已經說明了的配置Validator Plugin意外還需要對需要校驗的form的action進行配置主要有兩個地方需要配置一個是<action>的input屬性一個是<action>的validate屬性input屬性必須指定包含校驗Form的jsp頁面的路徑以便Struts的校驗框架校驗失敗的時候可以重新導向到原來的頁面讓用戶重新輸入validator屬性是一個boolean類型的屬性必須設置為true struts才會啟動自動校驗機制
在JSP頁面捕捉錯誤信息
Validator的校驗機制可以定義在服務端進行校驗或者通過Javascript在浏覽器端進行校驗這兩種不同的方式在JSP頁面編寫的時候有很大的區別
捕捉服務端的錯誤信息
要捕捉服務端校驗的錯誤信息比較簡單只需要在JSP頁面中嵌入一下的代碼就可以在頁面中顯示錯誤信息這些錯誤信息也可以自定義顯示風格
<logic:messagesPresent>
<bean:message key=testerrordescript/>
<html:messages id=error>
<li><bean:write name=error/></li>
</html:messages>
</logic:messagesPresent>
<bean:message key=testerrordescript/>通過ApplicationResourcesproperties文件中定義的信息向用戶報告錯誤發生的原因和簡單說明
<html:messages id=error>
<li><bean:write name=error /></li>
</html:messages>
則是顯示具體的由Validator框架產生的錯誤信息
捕捉JavaScript的錯誤信息
要捕捉JavaScript產生的錯誤信息首先要使JSP頁面產生Validator生成的Javascript代碼並在用戶點擊提交按鈕的時候讓提交按鈕觸發相應的校驗函數實現方法如下:
首先要讓JSP觸發校驗函數使用這樣的HTML代碼:
<html:form action=/testActiondo onsubmit=return validateTestForm(this);>
其中action指定這個form對應的action這個跟普通的form沒有區別onsubmit屬性就指定了校驗函數它的規則是: return + 空格 + validator+ ValidatorForm的名字 + (this)
注意這樣的組合規則是不能變的否則會導致頁面錯誤並不能實現校驗功能還要注意ValidatorForm的名字的第一個字母一定要大寫不管在Strutscongfigxml文件中的定義是否大寫這裡都要把它作為大寫字母
然後還要在JSP頁面中產生可以實現校驗的JavaScript代碼這個步驟也很簡單只需要在JSP頁面的末尾加上下面一句:
<html:javascript formName=testForm staticJavascript=true/>
其中formName的名字要跟strutsconfigxml文件中配置的一致大小寫也要一致staticJavascript為true的時候Validator將使用JavaScript代碼進行校驗(這些Javascript代碼由Struts 的validator框架自動產生我們只需要配置validatorxml文件)staticJavascript為false的時候validator將使用服務端代碼進行校驗這些服務端的校驗代碼也不需要我們編寫
From:http://tw.wingwit.com/Article/program/Java/ky/201311/27972.html