您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關java中Struts2單選按鈕及枚舉類型如何轉換的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
具體如下。
使用struts2標簽,毫無疑問要先引入標簽庫:
<%@ taglib prefix="s" uri="/struts-tags"%>
假設radio單選框中List的值為一個Map集合:
<s:radio list="#{'MAN':'男','WOMEN':'女'}" name="gender" listKey="key" listValue="value" value="'MAN'" theme="simple"/>
注:
1.name屬性還是對應HTML代碼的name屬性。
2.listKey屬性對應HTML代碼的value屬性。
3.listValue屬性對應HTML代碼label標簽屬性。
4.value屬性是指:當value的值和集合中的值匹配時就選中(如果value的值為字符串時要加上單引號)。
執行后會解析為html代碼,如圖:
下面我們通過一個案例來說明:
修改用戶的時候,跳轉到修改界面,在修改界面要回顯用戶的性別,這里性別我們使用枚舉來表示。
最開始的用戶界面:
項目結構:
用戶界面:
<body> <form action="enumAction_test.action" method="post"> 請選擇性別: <s:radio list="#{'MAN':'男','WOMEN':'女'}" name="gender" listKey="key" listValue="value" value="'MAN'" theme="simple"/> <input type="submit" value="提交"> </form> </body>
后臺action代碼:
public class EnumAction { /*定義性別,默認是男*/ private Gender gender = Gender.MAN; public Gender getGender() { return gender; } public void setGender(Gender gender) { this.gender = gender; } /*測試方法*/ public String test(){ return "success"; } }
注:因為我們使用的是枚舉類型,所以要進行類型轉換(具體轉換方法在前面的博客中有提到)。
枚舉類型轉換類代碼:
public class EnumTypeConverter extends DefaultTypeConverter { @SuppressWarnings("rawtypes") @Override public Object convertValue(Map<String, Object> context, Object value, Class toType) { /*從前臺到后臺即從字符串轉為枚舉類型*/ if (toType == Gender.class){ /*把value強轉為數組類型*/ String[] params = (String[]) value; return Gender.valueOf(params[0]); } else if (toType == String.class){ /*從后臺action傳到前臺,即Gender類型轉換為String類型 */ /*把value強轉為Gender*/ Gender gender = (Gender) value; return gender.toString(); } return null; } }
定義全局類型轉的屬性文件:
com.lixue.bean.Gender=com.lixue.converter.EnumTypeConverter
跳轉后的結果頁面(用戶修改界面):
<body> 您的性別:<s:radio list="#{'MAN':'男','WOMEN':'女'}" name="gender" listKey="key" listValue="value" value="gender" theme="simple"/> </body>
注:在修改界面是如何實現用戶當前所選性別的回顯呢?關鍵是看value值,上述代碼中的value我就寫了一個gender,其實這個gender是在action中定義的一個屬性,上一篇文章我們講OGNL的時候就說過,action中的屬性會保存在值棧中,我們取值棧中的屬性,直接通過屬性名稱就可以獲取,不需要通過#命名空間的形式獲取。獲取完然后和前面的map集合進行匹配,判斷是否勾選。
1.有人可能會有疑問,為什么listKey可以直接寫上key,listValue可以直接寫value。
解答:struts2在解析<s:radio>標簽中的那個list集合時,使用的是Iterator,iterator的功能是每次循環都會將結果(每次獲取一個Entry對象)保存在值棧的棧頂,所以通過OGNL表達式取值的時候,直接通過對象的屬性(Entry的屬性名稱為key和value)名稱來取值即可,不需要使用#命名空間的方式,不明白OGNL表達式的同學可以看上一篇文章。
2.我們會發現在寫標簽的時候我們總會寫theme這個屬性,這個屬性的功能是為了避免struts2在解析標簽的時候,生成一些不必要的代碼,但是每次都要寫,豈不是很坑爹,其實我們可以在struts.xml文件中配置一個常量就可以達到效果:
<!--struts2標簽主題樣式--> <constant name="struts.ui.theme" value="simple" />
感謝各位的閱讀!關于“java中Struts2單選按鈕及枚舉類型如何轉換”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。