struts2枚舉轉換器(helloworld)

來源:互聯網
上載者:User

1.枚舉類:

public enum AreaType implements IEnumConverter {FZ("福州", 591), XM("廈門", 592);private String text;private Integer value;private AreaType(String text, Integer value) {this.text = text;this.value = value;}@Overridepublic String getName() {return this.name();}@Overridepublic Integer getOrdinal() {return this.ordinal();}@Overridepublic String getText() {return text;}@Overridepublic Integer getValue() {return value;}/** * 根據序數得到枚舉 *  * @param ordinal * @return */public static AreaType getByOrdinal(Integer ordinal) {if (null != ordinal) {for (AreaType t : AreaType.values()) {if (t.ordinal() == ordinal) {return t;}}}return null;}}

2.介面,讓枚舉實現這個介面,達到所有的枚舉都可以轉換的效果

/** * 自訂的枚舉轉換器介面,自己定義的枚舉實現這個介面,struts2的轉換器就會對其進行轉換 *  * @author chenl 建立日期 Dec 1, 2011 */public interface IEnumConverter {/** * 得到序數 */Integer getOrdinal();/** * 返回此枚舉常量的名稱,在其枚舉聲明中對其進行聲明 */String getName();String getText();Integer getValue();}

3.枚舉轉換器,繼承StrutsTypeConverter類

/** * 枚舉轉換器 *  * @author chenl 建立日期 Dec 1, 2011 */public class EnumCommonConverter extends StrutsTypeConverter {@Overridepublic Object convertFromString(Map context, String[] values, Class clazz) {System.out.println("進入轉換器......");String str = values[0];if (str != null && !"".equals(str)) {try {IEnumConverter[] enums = (IEnumConverter[]) clazz.getMethod("values").invoke(null);// 調用枚舉的values方法if (null != enums && enums.length > 0) {for (IEnumConverter e : enums) {if (str.equals(e.getValue().toString())) {return e;}}}} catch (Exception e) {e.printStackTrace();}}return null;}@Overridepublic String convertToString(Map context, Object o) {System.out.println("入進轉換器的convertToString方法......");return null != o && o instanceof IEnumConverter ? ((IEnumConverter) o).getText() : "";}public static void main(String[] args) {Object obj = new EnumCommonConverter().convertFromString(null, new String[] { "1" }, AreaType.class);System.out.println(obj);}}

4.最後是在工程的src的目錄下加入xwork-conversion.properties檔案,

內容為:com.jungle.enums.IEnumConverter = com.jungle.enums.EnumCommonConverter

請求頁面:

<!-- 枚舉轉換器 例子--><%AreaType[] areas = AreaType.values();request.setAttribute("areas",areas);%><s:form action="enum!execute.action" namespace="/"><s:select name="area" list="#request.areas" id="area"listKey="value" listValue="text"></s:select><s:submit></s:submit></s:form>

Action:

import com.jungle.enums.AreaType;import com.opensymphony.xwork2.ActionSupport;@Results(value = { @Result(name = "success", location = "/enum.jsp") })public class EnumAction extends ActionSupport {private AreaType area;@Overridepublic String execute() throws Exception {System.out.println("EnumAction.execute():" + area);return SUCCESS;}public AreaType getArea() {return area;}public void setArea(AreaType area) {this.area = area;}}

結果頁:

<s:property value="area.name"/><s:property value="area.text"/><s:property value="area.value"/>

轉換器寫得不是很完善,還需要改進,這篇文章只是想起到拋磚引玉的作用。

這裡的Action使用了無配置的外掛程式需要用到struts2-convention-plugin.jar可以查看我的另一篇文章:http://blog.csdn.net/cl61917380/article/details/7017745

這篇的重點是轉換器。你也可以使用常規的方法訪問.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.