Struts2入門(mén)(四)——數(shù)據(jù)輸入驗(yàn)證
一、前言
1.1、什么是輸入驗(yàn)證?為什么需要輸入驗(yàn)證?
在上一篇文章中,我們學(xué)習(xí)了數(shù)據(jù)類型轉(zhuǎn)換,我們提到了表示層數(shù)據(jù)處理的兩個(gè)方法,也提到了用戶輸入數(shù)據(jù)需要進(jìn)行類型轉(zhuǎn)換才能得到我們想要的數(shù)據(jù),那么,我們?cè)趺创_定類型轉(zhuǎn)換后的數(shù)據(jù),是我們想要的數(shù)據(jù)呢?這里有點(diǎn)繞。你可以這樣想:一個(gè)成年男子年齡是18歲,你現(xiàn)在想要得到18這個(gè)數(shù)據(jù),但是,用戶輸入32,經(jīng)過(guò)類型轉(zhuǎn)換也是對(duì)的,但是數(shù)據(jù)不是你想要的。這時(shí)候,我們要怎么辦?所以輸入驗(yàn)證在這里就有用處了。
類型轉(zhuǎn)換和輸入驗(yàn)證的關(guān)系是:類型轉(zhuǎn)換是輸入驗(yàn)證的前提,如果類型轉(zhuǎn)換都出錯(cuò)了,那就不用再進(jìn)行輸入驗(yàn)證了。但是很多時(shí)候類型轉(zhuǎn)換和輸入驗(yàn)證是同時(shí)完成的。
輸入驗(yàn)證有兩種:
1、客戶端驗(yàn)證;
2、服務(wù)端驗(yàn)證。這里主要講解的是服務(wù)端驗(yàn)證(重寫(xiě)ValidateXxx方法和xml配置文件驗(yàn)證)
1.2、重寫(xiě)ValidateXxx方法的驗(yàn)證流程
1、類型轉(zhuǎn)換器負(fù)責(zé)對(duì)字符串的請(qǐng)求參數(shù)進(jìn)行類型轉(zhuǎn)換,并將這些值設(shè)置成Action的屬性值
2、在執(zhí)行類型轉(zhuǎn)換過(guò)程中可能出現(xiàn)異常,如果出現(xiàn)異常,異常信息會(huì)自動(dòng)保存到ActionContext中,conversionError攔截器負(fù)責(zé)將其封裝到fieldError中
3、通過(guò)反射調(diào)用ValidateXxx()方法,其中Xxx是即將處理用戶請(qǐng)求的處理邏輯所對(duì)應(yīng)的方法名
4、調(diào)用Action類的Validate方法
5、如果上面的步驟沒(méi)有出現(xiàn)fieldError,將調(diào)用Action里處理用戶請(qǐng)求的處理方法,如果出現(xiàn)fieldError,系統(tǒng)將轉(zhuǎn)入input邏輯視圖所指定的視圖。
二、輸入驗(yàn)證
2.1、輸入驗(yàn)證這里講解的有兩種方式:
1、重寫(xiě)Validate方法或者自定義ValidateXxx方法(其中的Xxx是自己定義的名字,會(huì)先執(zhí)行該方法,在執(zhí)行Validate方法)
2、新建xml進(jìn)行驗(yàn)證
2.2、重寫(xiě)Validate方法
在MVC框架,都會(huì)提供規(guī)范的數(shù)據(jù)驗(yàn)證部分,Struts2在這里提供的是一個(gè)Validate方法,我們重寫(xiě)Validate方法就可以進(jìn)行輸入驗(yàn)證,但是,重寫(xiě)Validate方法有兩個(gè)點(diǎn)需要知道:1、Validate方法會(huì)在execute方法之前被執(zhí)行;2、Validate方法對(duì)所有的Action都會(huì)執(zhí)行校驗(yàn)規(guī)則,為了區(qū)別某一個(gè)Action,我們可以使用ValidateXxx方法。
注意:以下的例子是局部類型轉(zhuǎn)換和輸入驗(yàn)證一起使用的例子。
簡(jiǎn)單的注冊(cè)驗(yàn)證例子:
新建實(shí)體類User: