Struts2單選按鈕詳解及枚舉類型的轉(zhuǎn)換代碼示例
本文研究的主要是Struts2框架單選按鈕詳解及枚舉類型的轉(zhuǎn)換的相關(guān)示例,具體如下。
使用struts2標(biāo)簽,毫無(wú)疑問(wèn)要先引入標(biāo)簽庫(kù):
<%@ taglib prefix="s" uri="/struts-tags"%>
假設(shè)radio單選框中List的值為一個(gè)Map集合:
<s:radio list="#{'MAN':'男','WOMEN':'女'}" name="gender" listKey="key" listValue="value" value="'MAN'" theme="simple"/>
注:
1.name屬性還是對(duì)應(yīng)HTML代碼的name屬性。
2.listKey屬性對(duì)應(yīng)HTML代碼的value屬性。
3.listValue屬性對(duì)應(yīng)HTML代碼label標(biāo)簽屬性。
4.value屬性是指:當(dāng)value的值和集合中的值匹配時(shí)就選中(如果value的值為字符串時(shí)要加上單引號(hào))。
執(zhí)行后會(huì)解析為html代碼,如圖:
下面我們通過(guò)一個(gè)案例來(lái)說(shuō)明:
修改用戶的時(shí)候,跳轉(zhuǎn)到修改界面,在修改界面要回顯用戶的性別,這里性別我們使用枚舉來(lái)表示。
最開(kāi)始的用戶界面:
實(shí)現(xiàn)代碼如下!!!!
項(xiàng)目結(jié)構(gòu):
用戶界面:
<body> <form action="enumAction_test.action" method="post"> 請(qǐng)選擇性別: <s:radio list="#{'MAN':'男','WOMEN':'女'}" name="gender" listKey="key" listValue="value" value="'MAN'" theme="simple"/> <input type="submit" value="提交"> </form> </body>
后臺(tái)action代碼:
public class EnumAction { /*定義性別,默認(rèn)是男*/ private Gender gender = Gender.MAN; public Gender getGender() { return gender; } public void setGender(Gender gender) { this.gender = gender; } /*測(cè)試方法*/ public String test(){ return "success"; } }
注:因?yàn)槲覀兪褂玫氖敲杜e類型,所以要進(jìn)行類型轉(zhuǎn)換(具體轉(zhuǎn)換方法在前面的博客中有提到)。
枚舉類型轉(zhuǎn)換類代碼:
public class EnumTypeConverter extends DefaultTypeConverter { @SuppressWarnings("rawtypes") @Override public Object convertValue(Map<String, Object> context, Object value, Class toType) { /*從前臺(tái)到后臺(tái)即從字符串轉(zhuǎn)為枚舉類型*/ if (toType == Gender.class){ /*把value強(qiáng)轉(zhuǎn)為數(shù)組類型*/ String[] params = (String[]) value; return Gender.valueOf(params[0]); } else if (toType == String.class){ /*從后臺(tái)action傳到前臺(tái),即Gender類型轉(zhuǎn)換為String類型 */ /*把value強(qiáng)轉(zhuǎn)為Gender*/ Gender gender = (Gender) value; return gender.toString(); } return null; } }
定義全局類型轉(zhuǎn)的屬性文件:
com.lixue.bean.Gender=com.lixue.converter.EnumTypeConverter
跳轉(zhuǎn)后的結(jié)果頁(yè)面(用戶修改界面):
<body> 您的性別:<s:radio list="#{'MAN':'男','WOMEN':'女'}" name="gender" listKey="key" listValue="value" value="gender" theme="simple"/> </body>
注:在修改界面是如何實(shí)現(xiàn)用戶當(dāng)前所選性別的回顯呢?關(guān)鍵是看value值,上述代碼中的value我就寫(xiě)了一個(gè)gender,其實(shí)這個(gè)gender是在action中定義的一個(gè)屬性,上一篇文章我們講OGNL的時(shí)候就說(shuō)過(guò),action中的屬性會(huì)保存在值棧中,我們?nèi)≈禇V械膶傩?,直接通過(guò)屬性名稱就可以獲取,不需要通過(guò)#命名空間的形式獲取。獲取完然后和前面的map集合進(jìn)行匹配,判斷是否勾選。
附:
1.有人可能會(huì)有疑問(wèn),為什么listKey可以直接寫(xiě)上key,listValue可以直接寫(xiě)value。
解答:struts2在解析<s:radio>標(biāo)簽中的那個(gè)list集合時(shí),使用的是Iterator,iterator的功能是每次循環(huán)都會(huì)將結(jié)果(每次獲取一個(gè)Entry對(duì)象)保存在值棧的棧頂,所以通過(guò)OGNL表達(dá)式取值的時(shí)候,直接通過(guò)對(duì)象的屬性(Entry的屬性名稱為key和value)名稱來(lái)取值即可,不需要使用#命名空間的方式,不明白OGNL表達(dá)式的同學(xué)可以看上一篇文章。
2.我們會(huì)發(fā)現(xiàn)在寫(xiě)標(biāo)簽的時(shí)候我們總會(huì)寫(xiě)theme這個(gè)屬性,這個(gè)屬性的功能是為了避免struts2在解析標(biāo)簽的時(shí)候,生成一些不必要的代碼,但是每次都要寫(xiě),豈不是很坑爹,其實(shí)我們可以在struts.xml文件中配置一個(gè)常量就可以達(dá)到效果:
<!--struts2標(biāo)簽主題樣式--> <constant name="struts.ui.theme" value="simple" />
總結(jié)
這幾篇Struts框架的學(xué)習(xí),頗有幾分撥開(kāi)云霧見(jiàn)青天之感,對(duì)于Java框架,算是有了比較清晰的了解,spring,mybatis等,諸如此類,萬(wàn)法相通。。。
以上就是本文關(guān)于Struts2單選按鈕詳解及枚舉類型的轉(zhuǎn)換代碼示例的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
相關(guān)文章
SpringMVC基于阻塞隊(duì)列LinkedBlockingQueue的同步長(zhǎng)輪詢功能實(shí)現(xiàn)詳解
這篇文章主要介紹了SpringMVC基于阻塞隊(duì)列LinkedBlockingQueue的同步長(zhǎng)輪詢功能實(shí)現(xiàn)詳解,本文介紹的也是生產(chǎn)者消費(fèi)者的一種實(shí)現(xiàn),生產(chǎn)者不必是一個(gè)始終在執(zhí)行的線程,它可以是一個(gè)接口,接受客戶端的請(qǐng)求,向隊(duì)列中插入消息,需要的朋友可以參考下2023-07-07Spring Boot + thymeleaf 實(shí)現(xiàn)文件上傳下載功能
最近同事問(wèn)我有沒(méi)有有關(guān)于技術(shù)的電子書(shū),我打開(kāi)電腦上的小書(shū)庫(kù),但是郵件發(fā)給他太大了,公司又禁止用文件夾共享,于是花半天時(shí)間寫(xiě)了個(gè)小的文件上傳程序,部署在自己的Linux機(jī)器上,需要的朋友可以參考下2018-01-01Intellj Idea中的maven工程Java文件顏色不對(duì),未被識(shí)別的解決
這篇文章主要介紹了Intellj Idea中的maven工程Java文件顏色不對(duì),未被識(shí)別的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08Java集合框架迭代器Iterator實(shí)現(xiàn)原理解析
這篇文章主要介紹了Java集合框架迭代器Iterator實(shí)現(xiàn)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08關(guān)于Spring Boot對(duì)jdbc的支持問(wèn)題
這篇文章主要介紹了關(guān)于Spring Boot對(duì)jdbc的支持問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04Log4j關(guān)閉Spring和Hibernate日志打印方式
這篇文章主要介紹了Log4j關(guān)閉Spring和Hibernate日志打印方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Spring實(shí)戰(zhàn)之使用Resource作為屬性操作示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之使用Resource作為屬性,結(jié)合實(shí)例形式分析了spring載人Resource作為屬性相關(guān)配置與使用技巧,需要的朋友可以參考下2020-01-01