本文我們來討論一下Struts中的輸入校驗問題。我們知道,信息系統有垃圾進垃圾出的特點,為了避免垃圾數據的輸入,對輸入進行校驗是任何信息系統都要面對的問題。在傳統的編程實踐中,我們往往在需要進行校驗的地方分別對它們進行校驗,而實際上需要校驗的東西大多都很類似,如必需的字段、日期、范圍等等。因此,應用程序中往往到處充斥著這樣一些顯得冗余的代碼。而與此形成鮮明對照的是Struts采用Validator框架(Validator框架現在是Jakarta Commons項目的一部分)來解決校驗問題,它將校驗規則代碼集中到外部的且對具體的應用程序中立的.xml文件中,這樣,就將那些到處出現的校驗邏輯從應用程序中分離出來,任何一個Struts應用都可以使用這個文件,同時還為校驗規則的擴展提供了便利。更難能可貴的是由于Validator框架將校驗中要用到的一些消息等信息與資源綁定有機結合在一起,使得校驗部分的國際化編程變得十分的便捷和自然。
Validator框架大致有如下幾個主要組件:
Validators:是Validator框架調用的一個Java類,它處理那些基本的通用的校驗,包括required、mask(匹配正則表達式)、最小長度、最大長度、范圍、日期等
.xml配置文件:主要包括兩個配置文件,一個是validator-rules.xml,另一個是validation.xml。前者的內容主要包含一些校驗規則,后者則包含需要校驗的一些form及其組件的集合。
資源綁定:提供(本地化)標簽和消息,缺省地共享struts的資源綁定。即校驗所用到的一些標簽與消息都寫在ApplicationResources.properity文件中。
Jsp tag:為給定的form或者action path生成JavaScript validations。
ValidatorForm:它是ActionForm的一個子類。
為了對Validator框架有一個比較直觀的認識,我們還是以前面的登陸例子的輸入來示范一下Validator框架的使用過程:
首先,找一個validator-rules.xml文件放在mystruts\WEB-INF目錄下,下面是該文件中涉及到的required驗證部分代碼的清單:
① 節的代碼是引用一個服務器邊的驗證器,其對應的代碼清單如下:
② 節是驗證失敗后的出錯信息,要將對應這些鍵值的信息寫入到ApplicationResources.properity文件中,常見的錯誤信息如下:
③ 節的代碼用于客戶邊的JavaScript驗證
其次,在validation.xml文件中配置要驗證的form極其相應的字段,下面是該文件中的代碼:
這里要注意的是:該文中的 和 中的鍵值都是取自資源綁定中的。前面還講到了出錯信息也是寫入ApplicationResources.properity文件中,因此,這就為國際化提供了一個很好的基礎。
再次,為了使服務器邊的驗證能夠進行,將用到的formBean從ActionForm的子類改為ValidatorForm的子類,即:
將public class UserInfoForm extends ActionForm改為:public class UserInfoForm extends ValidatorForm
到此,進行服務器邊的驗證工作已經一切準備得差不多了,此時,只要完成最后步驟就可以實驗服務器邊的驗證了。但大多數情況下,人們總希望把這些基本的簡單驗證放在客戶邊進行。
為了能進行客戶邊的驗證,我們還要對logon.jsp文件做適當的修改。
將
改為
在標簽后加上:
最后,對struts的配置文件struts-config.xml作適當的修改:
1、將
改為
其作用是要求進行校驗
2、將下列代碼放在struts-config.xml文件中的標簽前。其作用是將用于校驗的各個組件結合在一起。
到此為止,我們的一切工作準備就緒,您可以享受自己的勞動成果了,試著輸入各種組合的用戶名和口令,看看它們的驗證效果。仔細體會你會發現,服務器邊的驗證要更全面一些,比如對password的字符長度的驗證。
參考文獻:
《Struts in Action》Ted Husted Cedric Dumoulin George Franciscus David Winterfeldt著
《Programming Jakarta Struts》Chuck Cavaness著
Validator框架大致有如下幾個主要組件:
Validators:是Validator框架調用的一個Java類,它處理那些基本的通用的校驗,包括required、mask(匹配正則表達式)、最小長度、最大長度、范圍、日期等
.xml配置文件:主要包括兩個配置文件,一個是validator-rules.xml,另一個是validation.xml。前者的內容主要包含一些校驗規則,后者則包含需要校驗的一些form及其組件的集合。
資源綁定:提供(本地化)標簽和消息,缺省地共享struts的資源綁定。即校驗所用到的一些標簽與消息都寫在ApplicationResources.properity文件中。
Jsp tag:為給定的form或者action path生成JavaScript validations。
ValidatorForm:它是ActionForm的一個子類。
為了對Validator框架有一個比較直觀的認識,我們還是以前面的登陸例子的輸入來示范一下Validator框架的使用過程:
首先,找一個validator-rules.xml文件放在mystruts\WEB-INF目錄下,下面是該文件中涉及到的required驗證部分代碼的清單:
|
① 節的代碼是引用一個服務器邊的驗證器,其對應的代碼清單如下:
|
② 節是驗證失敗后的出錯信息,要將對應這些鍵值的信息寫入到ApplicationResources.properity文件中,常見的錯誤信息如下:
|
③ 節的代碼用于客戶邊的JavaScript驗證
其次,在validation.xml文件中配置要驗證的form極其相應的字段,下面是該文件中的代碼:
|
這里要注意的是:該文中的
再次,為了使服務器邊的驗證能夠進行,將用到的formBean從ActionForm的子類改為ValidatorForm的子類,即:
將public class UserInfoForm extends ActionForm改為:public class UserInfoForm extends ValidatorForm
到此,進行服務器邊的驗證工作已經一切準備得差不多了,此時,只要完成最后步驟就可以實驗服務器邊的驗證了。但大多數情況下,人們總希望把這些基本的簡單驗證放在客戶邊進行。
為了能進行客戶邊的驗證,我們還要對logon.jsp文件做適當的修改。
將
|
|
在標簽后加上:
|
最后,對struts的配置文件struts-config.xml作適當的修改:
1、將
|
|
2、將下列代碼放在struts-config.xml文件中的標簽前。其作用是將用于校驗的各個組件結合在一起。
|
到此為止,我們的一切工作準備就緒,您可以享受自己的勞動成果了,試著輸入各種組合的用戶名和口令,看看它們的驗證效果。仔細體會你會發現,服務器邊的驗證要更全面一些,比如對password的字符長度的驗證。
參考文獻:
《Struts in Action》Ted Husted Cedric Dumoulin George Franciscus David Winterfeldt著
《Programming Jakarta Struts》Chuck Cavaness著