本文研究的主要是struts2框架單選按鈕詳解及枚舉類型的轉(zhuǎn)換的相關(guān)示例,具體如下。
使用struts2標(biāo)簽,毫無疑問要先引入標(biāo)簽庫(kù):
1
|
<%@ taglib prefix= "s" uri= "/struts-tags" %> |
假設(shè)radio單選框中l(wèi)ist的值為一個(gè)map集合:
1
2
|
<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代碼,如圖:
下面我們通過一個(gè)案例來說明:
修改用戶的時(shí)候,跳轉(zhuǎn)到修改界面,在修改界面要回顯用戶的性別,這里性別我們使用枚舉來表示。
最開始的用戶界面:
實(shí)現(xiàn)代碼如下!!!!
項(xiàng)目結(jié)構(gòu):
用戶界面:
1
2
3
4
5
6
7
|
<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代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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)換類代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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)的屬性文件:
1
|
com.lixue.bean.gender=com.lixue.converter.enumtypeconverter |
跳轉(zhuǎn)后的結(jié)果頁(yè)面(用戶修改界面):
1
2
3
|
<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我就寫了一個(gè)gender,其實(shí)這個(gè)gender是在action中定義的一個(gè)屬性,上一篇文章我們講ognl的時(shí)候就說過,action中的屬性會(huì)保存在值棧中,我們?nèi)≈禇V械膶傩裕苯油ㄟ^屬性名稱就可以獲取,不需要通過#命名空間的形式獲取。獲取完然后和前面的map集合進(jìn)行匹配,判斷是否勾選。
附:
1.有人可能會(huì)有疑問,為什么listkey可以直接寫上key,listvalue可以直接寫value。
解答:struts2在解析<s:radio>標(biāo)簽中的那個(gè)list集合時(shí),使用的是iterator,iterator的功能是每次循環(huán)都會(huì)將結(jié)果(每次獲取一個(gè)entry對(duì)象)保存在值棧的棧頂,所以通過ognl表達(dá)式取值的時(shí)候,直接通過對(duì)象的屬性(entry的屬性名稱為key和value)名稱來取值即可,不需要使用#命名空間的方式,不明白o(hù)gnl表達(dá)式的同學(xué)可以看上一篇文章。
2.我們會(huì)發(fā)現(xiàn)在寫標(biāo)簽的時(shí)候我們總會(huì)寫theme這個(gè)屬性,這個(gè)屬性的功能是為了避免struts2在解析標(biāo)簽的時(shí)候,生成一些不必要的代碼,但是每次都要寫,豈不是很坑爹,其實(shí)我們可以在struts.xml文件中配置一個(gè)常量就可以達(dá)到效果:
1
2
|
<!--struts2標(biāo)簽主題樣式--> <constant name= "struts.ui.theme" value= "simple" /> |
總結(jié)
這幾篇struts框架的學(xué)習(xí),頗有幾分撥開云霧見青天之感,對(duì)于java框架,算是有了比較清晰的了解,spring,mybatis等,諸如此類,萬法相通。。。
以上就是本文關(guān)于struts2單選按鈕詳解及枚舉類型的轉(zhuǎn)換代碼示例的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
原文鏈接:http://blog.csdn.net/lzm1340458776/article/details/29814825