Struts2選項按鈕詳解及枚舉類型的轉碼樣本,struts2單選

來源:互聯網
上載者:User

Struts2選項按鈕詳解及枚舉類型的轉碼樣本,struts2單選

本文研究的主要是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" /> 
總結

這幾篇Struts架構的學習,頗有幾分撥開雲霧見青天之感,對於Java架構,算是有了比較清晰的瞭解,spring,mybatis等,諸如此類,萬法相通。。。

以上就是本文關於Struts2選項按鈕詳解及枚舉類型的轉碼樣本的全部內容,希望對大家有所協助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支援!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.