Struts2入門(三)——類型轉(zhuǎn)換
一、前言
筆者一直覺得,學(xué)習(xí)一個(gè)知識(shí)點(diǎn),你首先要明白,這東西是什么?有什么用?這樣你才能了解。好了,不說廢話。
1.1、類型轉(zhuǎn)換為何存在?什么是類型轉(zhuǎn)換?
在MVC框架中,都是屬于表示層解決方案,都需要負(fù)責(zé)收集用戶請(qǐng)求的參數(shù),并且將請(qǐng)求參數(shù)傳給應(yīng)用的控制器組件,但是,這里有一個(gè)問題,客戶端提交的請(qǐng)求參數(shù)都是字符串?dāng)?shù)據(jù)類型,而java這門語言本身就是強(qiáng)類型語言,所以我們需要類型轉(zhuǎn)換,就是把字符串類型轉(zhuǎn)化為你所需要的類型。
在MVC框架中,表示層數(shù)據(jù)處理分為兩個(gè)方法:客戶端輸入數(shù)據(jù),服務(wù)端輸出數(shù)據(jù);客戶端輸入數(shù)據(jù)需要進(jìn)行類型轉(zhuǎn)換才能確保我們的數(shù)據(jù)類型是正確的,服務(wù)端輸出數(shù)據(jù)無需經(jīng)過類型轉(zhuǎn)換。
簡(jiǎn)單說就是:
在javaweb中,當(dāng)你在jsp頁面提交一個(gè)username到servlet中,你是否在通過request.getParameter("username")去獲取數(shù)據(jù);但是
如果是一個(gè)Date時(shí)間類型呢?你是否要先指定時(shí)間的轉(zhuǎn)換格式,然后再根據(jù)request.getParameter("date");獲取數(shù)據(jù)之后再去轉(zhuǎn)換呢?但是,你想過沒有?如果是多個(gè)頁面請(qǐng)求數(shù)據(jù)的話,那你每次打getParameter();這個(gè)方法,累嗎?你不累,程序都累了。所以,Struts2 為我們提供了一種類型轉(zhuǎn)換器,只需要編寫固定的操作就能得到你想要的數(shù)據(jù),簡(jiǎn)單說來,就是把表單的數(shù)據(jù)賦值給實(shí)體類。
1.2、類型轉(zhuǎn)換器簡(jiǎn)單介紹
1.2.1、類型轉(zhuǎn)換器需要繼承DefaultTypeConverter類,需要重寫該類的convertType方法。
convertType方法的作用:
1、負(fù)責(zé)對(duì)類型的轉(zhuǎn)換,不過這種轉(zhuǎn)換是雙向的,我們可以通過判斷數(shù)據(jù)的類型判斷轉(zhuǎn)換的方向
2、該方法有三個(gè)參數(shù):
context:是類型轉(zhuǎn)換環(huán)境的上下文
value: 是需要轉(zhuǎn)換的參數(shù)(隨轉(zhuǎn)換方向不同,如果字符串向?qū)嵗D(zhuǎn)換時(shí),它是字符串?dāng)?shù)組;如果實(shí)例字符串轉(zhuǎn)換時(shí),它是實(shí)例)
toType: 是轉(zhuǎn)換后的目標(biāo)參數(shù)
1.2.2、當(dāng)然,你也可以繼承StrutsTypeConverter是,它是Struts2為我們簡(jiǎn)化的類型轉(zhuǎn)換器,是DefaultTypeConverter的子類,默認(rèn)產(chǎn)生兩個(gè)方法,更加明確的告訴你你要在哪個(gè)方法進(jìn)行轉(zhuǎn)換,這樣就不用跟繼承DefaultTypeConverter類一樣,通過convertType方法里的參數(shù)toType每次去判斷。繼承StrutsTypeConveter該類比較簡(jiǎn)單。這里兩種繼承都有說到。
二、類型轉(zhuǎn)換器
2.1、類型轉(zhuǎn)換器有兩種:局部類型轉(zhuǎn)換器和全局類型轉(zhuǎn)換器,就字面上的意思一樣,全局和局部的。
關(guān)于類型轉(zhuǎn)換器的注冊(cè)方式有三種:
1、局部類型轉(zhuǎn)換器僅僅對(duì)某個(gè)Action起作用
2、全局類型轉(zhuǎn)換器對(duì)所有Action特定類型的屬性都會(huì)起作用
3、我們可以通過注解的方式來生成類型轉(zhuǎn)換器(JDK1.5以上的注解)
2.2、局部類型轉(zhuǎn)換器:
新建實(shí)體類userbean: