Struts框架_9 Struts2的驗證

小槓桿兒發表於2020-10-31

Struts2的驗證
驗證分為兩種:
>宣告式驗證:
I.先明確對哪-個Action的哪-個欄位進行驗證: age
II.編寫配置檔案:
>把struts-2.3.15.3\apps\struts2-blank \WEB- INF \classes \example下的Login-validation. xml檔案複製到當前Action所在的包下。
>把該配置檔案改為:把Login改為當前Action的名字。


>編寫驗證規則:參見struts-2.3.15. 3/docs/WW/ docs/validation.html 文件即可.
>在配置檔案中可以定義錯誤訊息:

>該錯誤訊息可以國際化嗎?

根路徑下:


III.若驗證失敗,則轉向input 的那個result.所以需要配置name=input的result
<result name=" input">/validation.jsp</result>

IV,如何顯示錯誤訊息呢?
>若使用的是非simple,則自動顯示錯誤訊息。
>若使用的是simple主題,則需要s:fielderror標籤或直接使用EL表示式(使用OGNL)
${fieldErrors.age[0] }
OR
<s:fielderror fieldName=" age" ></s :fielderror>*

Struts2內建的驗證規則
●conversion validator :轉換驗證器
●date validator :日期驗證器
●double validator :浮點驗證器
●email validator : email驗證器
●expression validator :表示式驗證器
●fieldexpression validator :欄位表示式驗證器
●int validator :整型驗證器
●regex validetor :正規表示式驗證器
●required validator :非空驗證器
●requiredstring validator :非空字串驗證器
●stringlength validator :字串長度驗證器
●url validator : url格式驗證器
●visitor validator :複合屬性驗證器

驗證程式的配置:

3).注意:若一個Action 類可以應答多個action請求,多個action 請求使用不同的驗證規則,怎麼辦?
>為每一個不同的action請求定義其對應的驗證檔案: ActionClassName-AliasName-validation . xml
>不帶別名的配置檔案: ActionClassName-validation. xml中的驗證規則依然會發生作用。可以把各個action公有的驗證規則配置在其中,但需要注意的是,只適用於某一個action的請求的驗證規則就不要這裡再配置了
4),宣告式驗證框架的原理:
> Struts2 預設的攔截器棧中提供了一個validation攔截器
>每個具體的驗證規則都會對應具體的一個驗證器, 有一個配置檔案把驗證規則名稱和驗證器關聯起來了。而實際上驗證的是那個驗證器

該檔案位於com. opensymphony . xwork2. validator . validators下的default .xml
<validator name= "required" class= "com.opensymphony.xwork2.validator.validators.RequiredFieldValidator>
Struts2內建的驗證程式
●required:確保某給定欄位的值不是空值null ," "。
●requiredstring:確保某給定欄位的值既不是空值null,也不是空白.
- trim 引數.預設為true,表示struts在驗證該欄位值之前先剔除前後空格.
●stringlength:驗證一 個非空的欄位值是不是有足夠的長度.
- minLength: 相關欄位的最小長度.若沒有給出這個引數該欄位將沒有最小長度限制
- maxLength:相關欄位的最大長度.若沒有給出這個引數該欄位將沒有最大長度限制
- trim: 在驗證之前是否去除前後空格
●date:確保某給定日期欄位的值落在一 個給定的範圍內
- max:相關欄位的最大值,若沒給出這個引數該欄位將沒有最大值限制
- min:相關欄位的最小值.若沒給出這個引數該欄位將沒有最小值限制
●email:檢查給定String值是否是-一個合法的email
●ur:檢查給定String值是否是一一個合法的url
●rgex:檢查某給定欄位的值是否與一一個給定的正規表示式模式相匹配.
- expresssion*:用來匹配的正規表示式
- caseSensitive: 是否區分字母的大小寫.預設為true
trim:是否去除前後空格.預設為true
●int:檢查給定整數字段值是否在某- 個範圍內
- min:相關欄位的最小值.若沒給出這個引數,該欄位將沒有最小值限制
- max:相關欄位的最大值.若沒給出這個引數該欄位將沒有最大值限制
●conversion: 檢查對給定Action屬性進行的型別轉換是否會導致一個轉換錯誤.該驗證程式還可以在預設的型別轉換訊息的基礎上新增一條自定義的訊息

短路驗證器:<validator/>元素和<field-validator /> 元素可以指定一個可選的short-circuit屬性,該屬性指定該驗證器是否是短驗證器,預設值為false。對同一個欄位內的多個驗證器, 如果一個短路驗證器驗證失敗,其他驗證器不會繼續校驗

●expression 和fieldexpression;用來驗證給定欄位是否滿足一個OGNL表示式
-前者是一個非欄位驗證程式,後者是一個欄位驗證程式.
-前者在驗證失敗時將生成一個action錯誤而後者在驗證失敗時會生成一個欄位錯誤
- expression*: 用來進行驗證的OGNL表示式

6).若型別轉換失敗,預設情況下還會執行後面的攔截器,還會進行驗證,可以通過修改ConversionErrorInterceptor 原始碼的方式使當型別轉換失敗時,不再執行後續的驗證攔截器,, 而直接返回input的result
將原始碼複製到包中,修改部分程式碼:

7).關於非欄位驗證:不是針對於某一個欄位的驗證,

顯示非欄位驗證的錯誤訊息,使用s:actionerror標籤: <s : actionerror/>

8).不同的欄位使用同樣的驗證規則,而且使用同樣的響應訊息?

9). 自定義驗證器:
定義一個驗證器的類
>自定義的驗證器都需要實現Validator .
>可以選擇繼承ValidatorSupport或FieldValidatorSupport類
>若希望實現一個一般的驗證器,則可以維承ValidatorSupport
>若希望實現一個欄位驗證器,則可以繼承FieldValidatorSupport
>具體實現可以參考目前已經有的驗證器。

>若驗證程式需要接受一個輸入引數, 需要為這個引數增加一個相應的屬性


II. 在配置檔案中配置驗證器
>預設情況下下,Struts2 會在類路徑的根目錄下載入validators.xml檔案。在該檔案中載入驗證器.
該檔案的定義方式同預設的驗證器的那個配置檔案:位於com. opensymphony . xwork2. validator. validators下的default.xml
>若類路徑下沒有指定的驗證器,則從com. opensymphony.xwork2. validator.validators下的default.xml中的驗證器載入

程式設計驗證
●Struts2提供了一個Validateable介面,可以使Action類實現這個介面以提供程式設計驗證功能
●ActionSupport類已經實現了Validateable介面

相關文章