`
phoenixocean
  • 浏览: 7935 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

struts2枚举转换器

 
阅读更多

1.枚举类:

 

  1. public enum AreaType implements IEnumConverter {  
  2.       
  3.     FZ("福州"591),   
  4.     XM("厦门"592);  
  5.       
  6.     private String text;  
  7.     private Integer value;  
  8.   
  9.     private AreaType(String text, Integer value) {  
  10.         this.text = text;  
  11.         this.value = value;  
  12.     }  
  13.   
  14.     @Override  
  15.     public String getName() {  
  16.         return this.name();  
  17.     }  
  18.   
  19.     @Override  
  20.     public Integer getOrdinal() {  
  21.         return this.ordinal();  
  22.     }  
  23.   
  24.     @Override  
  25.     public String getText() {  
  26.         return text;  
  27.     }  
  28.   
  29.     @Override  
  30.     public Integer getValue() {  
  31.         return value;  
  32.     }  
  33.   
  34.     /** 
  35.      * 根据序数得到枚举 
  36.      *  
  37.      * @param ordinal 
  38.      * @return 
  39.      */  
  40.     public static AreaType getByOrdinal(Integer ordinal) {  
  41.         if (null != ordinal) {  
  42.             for (AreaType t : AreaType.values()) {  
  43.                 if (t.ordinal() == ordinal) {  
  44.                     return t;  
  45.                 }  
  46.             }  
  47.         }  
  48.         return null;  
  49.     }  
  50. }  

 

2.接口,让枚举实现这个接口,达到所有的枚举都可以转换的效果

 

  1. /** 
  2.  * 自定义的枚举转换器接口,自己定义的枚举实现这个接口,struts2的转换器就会对其进行转换 
  3.  *  
  4.  * @author chenl 创建日期 Dec 1, 2011 
  5.  */  
  6. public interface IEnumConverter {  
  7.     /** 
  8.      * 得到序数 
  9.      */  
  10.     Integer getOrdinal();  
  11.   
  12.     /** 
  13.      * 返回此枚举常量的名称,在其枚举声明中对其进行声明 
  14.      */  
  15.     String getName();  
  16.   
  17.     String getText();  
  18.       
  19.     Integer getValue();  
  20. }  

3.枚举转换器,继承StrutsTypeConverter类

 

 

  1. /** 
  2.  * 枚举转换器 
  3.  *  
  4.  * @author chenl 创建日期 Dec 1, 2011 
  5.  */  
  6. public class EnumCommonConverter extends StrutsTypeConverter {  
  7.   
  8.     @Override  
  9.     public Object convertFromString(Map context, String[] values, Class clazz) {  
  10.         System.out.println("进入转换器......");  
  11.         String str = values[0];  
  12.         if (str != null && !"".equals(str)) {  
  13.             try {  
  14.                 IEnumConverter[] enums = (IEnumConverter[]) clazz.getMethod("values").invoke(null);// 调用枚举的values方法  
  15.                 if (null != enums && enums.length > 0) {  
  16.                     for (IEnumConverter e : enums) {  
  17.                         if (str.equals(e.getValue().toString())) {  
  18.                             return e;  
  19.                         }  
  20.                     }  
  21.                 }  
  22.             } catch (Exception e) {  
  23.                 e.printStackTrace();  
  24.             }  
  25.         }  
  26.         return null;  
  27.     }  
  28.   
  29.     @Override  
  30.     public String convertToString(Map context, Object o) {  
  31.         System.out.println("入进转换器的convertToString方法......");  
  32.         return null != o && o instanceof IEnumConverter ? ((IEnumConverter) o).getText() : "";  
  33.     }  
  34.   
  35.     public static void main(String[] args) {  
  36.         Object obj = new EnumCommonConverter().convertFromString(nullnew String[] { "1" }, AreaType.class);  
  37.         System.out.println(obj);  
  38.   
  39.     }  
  40. }  

 

 

 

4.最后是在工程的src的目录下加入xwork-conversion.properties文件,

内容为:com.jungle.enums.IEnumConverter = com.jungle.enums.EnumCommonConverter


 

请求页面:

 

  1. <!-- 枚举转换器 例子-->  
  2.             <%  
  3.                 AreaType[] areas = AreaType.values();  
  4.                 request.setAttribute("areas",areas);  
  5.             %>  
  6.             <s:form action="enum!execute.action" namespace="/">  
  7.                 <s:select name="area" list="#request.areas" id="area"  
  8.                     listKey="value" listValue="text">  
  9.                 </s:select>  
  10.                 <s:submit></s:submit>  
  11.             </s:form>  

 

Action:

 

  1. import com.jungle.enums.AreaType;  
  2. import com.opensymphony.xwork2.ActionSupport;  
  3.   
  4. @Results(value = { @Result(name = "success", location = "/enum.jsp") })  
  5. public class EnumAction extends ActionSupport {  
  6.     private AreaType area;  
  7.     @Override  
  8.     public String execute() throws Exception {  
  9.         System.out.println("EnumAction.execute():" + area);  
  10.         return SUCCESS;  
  11.     }  
  12.     public AreaType getArea() {  
  13.         return area;  
  14.     }  
  15.     public void setArea(AreaType area) {  
  16.         this.area = area;  
  17.     }  
  18. }  

 

结果页:

 

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

 


 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics