struts2類(lèi)型轉(zhuǎn)換介紹

1. ActionSupport介紹

我們自定義一個(gè)Action的時(shí)候来颤,通常需要繼承ActionSupport,因?yàn)锳ctionSupport實(shí)現(xiàn)了一系列的接口输瓜,也就是說(shuō)通過(guò)繼承它嗅剖,我們可以很方便的實(shí)現(xiàn)一些功能,例如:國(guó)際化蕾域、數(shù)據(jù)校驗(yàn)

2. DefaultTypeConverter介紹

我們自定義開(kāi)發(fā)的類(lèi)型轉(zhuǎn)換器需要直接或間接繼承它,才能夠被struts2框架調(diào)用

3. StrutsTypeConverter介紹

struts2自帶的類(lèi)型轉(zhuǎn)換器的父類(lèi)到旦,繼承了DefaultTypeConverter旨巷,也就是說(shuō)對(duì)DefaultTypeConverter進(jìn)行了優(yōu)化,通過(guò)繼承它更方便開(kāi)發(fā)者開(kāi)發(fā)自己的類(lèi)型轉(zhuǎn)換器

4. 自定義局部轉(zhuǎn)換器實(shí)現(xiàn)步驟

首先要說(shuō)明StrutsTypeConverter底層使用的就是DefaultTypeConverter添忘,所以我們自定義的類(lèi)型轉(zhuǎn)換器不管是繼承誰(shuí)采呐,其實(shí)現(xiàn)機(jī)理是不變的

  1. 新建一個(gè)package,并在該包下新建一個(gè)類(lèi)搁骑,該類(lèi)要繼承DefaultTypeConverter

  2. 覆蓋convertValue(Map<String, Object> context, Object value, Class toType)方法

  3. 編寫(xiě)convertValue方法中的核心邏輯

  4. 在需要進(jìn)行類(lèi)型轉(zhuǎn)換的Action所在的包下新建一個(gè)properties文件斧吐,該文件的命名要遵循如下規(guī)則:

ActionName-conversion.properties

  1. 在ActionName-conversion.properties文件中輸入key/value,該key是Action中需要進(jìn)行類(lèi)型轉(zhuǎn)換的屬性名(準(zhǔn)確的說(shuō)是該屬性所對(duì)應(yīng)的方法名的后綴仲器,即setXXX中的xxx)而value為之前新建的類(lèi)型轉(zhuǎn)換器的全限定名

這樣當(dāng)struts2處理http請(qǐng)求的時(shí)候煤率,當(dāng)發(fā)現(xiàn)有符合條件的自定義類(lèi)型轉(zhuǎn)換器的時(shí)候,就會(huì)使用該轉(zhuǎn)換器進(jìn)行類(lèi)型轉(zhuǎn)換娄周,并將轉(zhuǎn)換后的結(jié)果涕侈,注入到Action對(duì)應(yīng)的屬性中沪停,同理當(dāng)需要將該Action的屬性輸出到頁(yè)面上的時(shí)候煤辨,也會(huì)經(jīng)過(guò)我們自定義的類(lèi)型轉(zhuǎn)換器,從而將java對(duì)象以字符串的形式輸出到頁(yè)面上

5. 自定義全局轉(zhuǎn)換器步驟

  1. 新建一個(gè)package木张,并在該包下新建一個(gè)類(lèi)众辨,該類(lèi)要繼承DefaultTypeConverter

  2. 覆蓋convertValue(Map<String, Object> context, Object value, Class toType)方法

  3. 編寫(xiě)convertValue方法中的核心邏輯

  4. 在src目錄下新建一個(gè)properties文件,該文件的命名格式如下:

xwork-conversion.propreties

  1. 在該屬性文件中鍵入key/value舷礼,kay的值為需要進(jìn)行類(lèi)型轉(zhuǎn)換的屬性的類(lèi)型鹃彻,value的值還是自定義類(lèi)型轉(zhuǎn)換器的全限定名

6. 類(lèi)型轉(zhuǎn)換器生效優(yōu)先級(jí)

局部類(lèi)型轉(zhuǎn)換器優(yōu)先級(jí)高于全局類(lèi)型轉(zhuǎn)換器,換言之妻献,當(dāng)都符合條件的情況下蛛株,局部類(lèi)型轉(zhuǎn)換器會(huì)生效而全局類(lèi)型轉(zhuǎn)換器不會(huì)生效

7. 實(shí)戰(zhàn)練習(xí)

7.1. 練習(xí)一

現(xiàn)有一個(gè)前端頁(yè)面代碼如下所示:

前臺(tái)頁(yè)面.png

當(dāng)我在user文本框中輸入"hello;world"并點(diǎn)擊提交的時(shí)候,要求能夠自動(dòng)注入到UserAction中的User類(lèi)型的user屬性中育拨,并且將該值輸出在output.jsp中

實(shí)現(xiàn)步驟:

  1. 首先新建一個(gè)package命名為com.shengsiyuan.action
  2. 在該包下新建一個(gè)類(lèi)命名為UserAction并繼承ActionSupport類(lèi)
  3. UserAction類(lèi)中包含屬性-user:User 并生成setter/getter方法
  4. 在該類(lèi)下覆蓋+ execute():String 方法谨履,并返回SUCCESS
  5. 新建一個(gè)package命名為com.shengsiyuan.model,并在該包下新建一個(gè)類(lèi)命名為User熬丧,該類(lèi)包含兩個(gè)屬性-username:String -password:String 并生成setter/getter方法
  6. 新建一個(gè)package命名為com.shengsiyuan.converter笋粟,并在該包下新建一個(gè)類(lèi)UserActionUserConverter,該類(lèi)繼承DefaultTypeConverter,并覆蓋及實(shí)現(xiàn)方法convertValue害捕,具體代碼如下:
自定義轉(zhuǎn)換器.png
  1. 在 com.shengsiyuan.action包下新建屬性文件UserAction-conversion.properties绿淋,該屬性文件中的內(nèi)容為user=com.shengsiyuan.converter.UserActionUserConverter
  2. 新建output.jsp文件,該jsp文件使用struts標(biāo)簽庫(kù)尝盼,并將UserAction中的user進(jìn)行輸出吞滞,具體實(shí)現(xiàn)如下圖所示:
output.jsp.png

測(cè)試:

首先訪(fǎng)問(wèn)login_1.jsp:

login_1.jsp.png

點(diǎn)擊提交后:

result.png

測(cè)試結(jié)果:成功

小結(jié):自定義轉(zhuǎn)換器的實(shí)現(xiàn)主要由Action、Model东涡、自定義轉(zhuǎn)換器冯吓、屬性文件構(gòu)成

7.2. 練習(xí)二

現(xiàn)有如下頁(yè)面:

前臺(tái)頁(yè)面.png

要求:該表單提交后,四個(gè)文本框的值能夠自動(dòng)注入到UserAction對(duì)象的屬性- userList:List<User>中疮跑,然后跳轉(zhuǎn)到output.jsp中并輸出這四個(gè)文本框的值

實(shí)現(xiàn)步驟:

實(shí)現(xiàn)步驟與練習(xí)一相似组贺,提幾個(gè)注意點(diǎn):

  1. UserAction中的屬性應(yīng)該定義為L(zhǎng)ist<User>類(lèi)型,如下圖所示:
UserAction.png
  1. 自定義轉(zhuǎn)換器中要進(jìn)行代碼調(diào)整祖娘,這里使用StrutsTypeConverter失尖,為了演示不同的形式罷了,如下圖所示:
自定義轉(zhuǎn)換器代碼.png

8. 總結(jié)

自定義類(lèi)型轉(zhuǎn)換器還是比較麻煩的一件事情渐苏,在使用spring框架的時(shí)候就沒(méi)有這種問(wèn)題掀潮,看來(lái)spring框架對(duì)此進(jìn)行了封裝或改良,但我想類(lèi)型轉(zhuǎn)換這一塊底層的實(shí)現(xiàn)應(yīng)該差不多吧琼富,系統(tǒng)學(xué)習(xí)spring的時(shí)候再看吧

9. 內(nèi)容引用來(lái)源

<< 張龍JavaEE視頻>>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末仪吧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鞠眉,更是在濱河造成了極大的恐慌薯鼠,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件械蹋,死亡現(xiàn)場(chǎng)離奇詭異出皇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)哗戈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)郊艘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人唯咬,你說(shuō)我怎么就攤上這事纱注。” “怎么了胆胰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵狞贱,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我煮剧,道長(zhǎng)斥滤,這世上最難降的妖魔是什么将鸵? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮佑颇,結(jié)果婚禮上顶掉,老公的妹妹穿的比我還像新娘。我一直安慰自己挑胸,他們只是感情好痒筒,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著茬贵,像睡著了一般簿透。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上解藻,一...
    開(kāi)封第一講書(shū)人閱讀 52,184評(píng)論 1 308
  • 那天老充,我揣著相機(jī)與錄音,去河邊找鬼螟左。 笑死啡浊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的胶背。 我是一名探鬼主播巷嚣,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼钳吟!你這毒婦竟也來(lái)了廷粒?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤红且,失蹤者是張志新(化名)和其女友劉穎坝茎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體直焙,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡景东,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年砂轻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奔誓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搔涝,死狀恐怖厨喂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情庄呈,我是刑警寧澤蜕煌,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站诬留,受9級(jí)特大地震影響斜纪,放射性物質(zhì)發(fā)生泄漏贫母。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一盒刚、第九天 我趴在偏房一處隱蔽的房頂上張望腺劣。 院中可真熱鬧,春花似錦因块、人聲如沸橘原。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)趾断。三九已至,卻和暖如春吩愧,著一層夾襖步出監(jiān)牢的瞬間芋酌,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工雁佳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留隔嫡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓甘穿,卻偏偏與公主長(zhǎng)得像腮恩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子温兼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理秸滴,服務(wù)發(fā)現(xiàn),斷路器募判,智...
    卡卡羅2017閱讀 134,695評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法荡含,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法届垫,繼承相關(guān)的語(yǔ)法释液,異常的語(yǔ)法,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,660評(píng)論 18 399
  • 標(biāo)簽 如果要配置的標(biāo)簽装处,那么必須要先配置標(biāo)簽误债,代表的包的概念。 包含的屬性 name包的名稱(chēng)妄迁,要求是唯一的寝蹈,管理a...
    偷偷得路過(guò)閱讀 1,352評(píng)論 0 0
  • 阿太是《皮囊》中的第一個(gè)故事。 阿太是作者外婆的媽媽?zhuān)亲髡咝闹械摹岸êI襻槨钡翘裕兴隗锢希髡呔陀X(jué)得心中安穩(wěn)。 作者...
    想跳舞的魚(yú)閱讀 4,135評(píng)論 0 2
  • 上面兩篇介紹了庫(kù)的接口及封裝黔州,還有個(gè)問(wèn)題就是數(shù)據(jù)的處理耍鬓。 問(wèn)題一:怎么處理通過(guò)回調(diào)【-(void) onSocke...
    小兒小二閱讀 1,025評(píng)論 0 3