`
phoenixocean
  • 浏览: 8251 次
  • 性别: 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"/>  

 


 

分享到:
评论

相关推荐

    struts2枚举值、日期值转换示例

    在这个“struts2枚举值、日期值转换示例”中,我们将关注如何自定义枚举值和日期值的转换器。 首先,枚举(Enum)在Java中是一种特殊的类,用于表示有限集合中的固定数量的值。在Struts2中,如果Action类的属性是...

    Struts2 自定类型转换器(三十四)

    在Struts2框架中,自定义类型转换器是开发者为了满足特定需求,对框架默认的类型转换机制进行扩展的一种方式。Struts2允许我们创建自己的转换器类来处理输入数据,确保模型对象的属性能够正确地被转换为预期的数据...

    Struts2.0属性转换器的作用说明

    自定义转换器需要实现`org.apache.struts2.util.FieldConverter`接口或者继承`org.apache.struts2.convention.converters.ConversionAwareConverter`抽象类。创建好转换器后,将其注册到Struts配置中,即可在需要的...

    传智播客struts2.1源代码_自定义类型转换器

    自定义类型转换器需要实现`org.apache.struts2.util.TypeConverter`接口,或者继承`org.apache.struts2.convention.converters.DefaultConversionProvider`基类,覆盖`convertValue()`方法。然后,通过在Action类或...

    [原]Struts2类型转换

    1. **默认类型转换**:Struts2有一套默认的类型转换器,可以处理基本类型(如int、String、Date等)以及一些常用类型。例如,如果表单字段是字符串,而Action类中的字段是整型,Struts2会自动将字符串转换为整型。 ...

    enum-converter:枚举的自定义转换器

    枚举的自定义转换器主要是为了在不同数据格式之间进行枚举的转换,例如将枚举值转换为字符串、整数或其他类型,以便于存储和传输。在Java中,我们可以通过实现`java.beans.PropertyEditorSupport`接口来自定义转换器...

    struts2的类型转换详解

    开发者只需实现`org.apache.struts2.conversion.Converter`接口,然后通过配置注册这个转换器,即可让Struts2在处理特定类型时使用自定义的转换逻辑。 在转换过程中,如果出现任何异常,Struts2的`conversionError`...

    struts2 2.09 java doc

    Struts2的JavaDoc文档包含了2.09版本的所有公开API接口、类、枚举、注解和方法的详细说明,是开发者了解和学习Struts2框架的重要参考资料。`struts-2.0.9-core.chm`文件是Struts2核心组件的JavaDoc,涵盖了框架的...

    struts2的jar包

    这些JAR文件包含了类库、接口、枚举、注解和其他必要的组件,使得开发者能够利用Struts2的功能,如动作调度、结果映射、拦截器、插件等。 "struts-2.3.24-lib"这个压缩包很可能包含了Struts2版本2.3.24所需的全部...

    Struts2常用的jar包

    6. **commons-lang3-3.2.jar**:Apache Commons Lang是提供了一些Java语言功能扩展的库,如字符串处理、日期/时间操作、枚举处理等,对Struts2的日常开发提供了便利。 7. **commons-io-2.2.jar**:Apache Commons ...

    struts2对Ognl的封装--TypeConverter

    然后,在Struts2的配置文件或Action类中,你可以指定这个转换器应用于哪些类型或字段。 此外,Struts2的`ValueStack`也会使用TypeConverter来处理Action类属性的设置。当Action实例化后,ValueStack会遍历请求参数...

    Struts2单选按钮详解及枚举类型的转换代码示例

    Struts2单选按钮详解及枚举类型的转换代码示例 Struts2单选按钮是Web应用程序中常用的UI组件之一,它允许...通过使用Struts2单选按钮和类型转换器,我们可以轻松地实现枚举类型的转换,并提高Web应用程序的开发效率。

    Struts2 在JDK1.4下运行(J4)

    2. **枚举**:Struts2中的Action和Result类型通常使用枚举表示,但在JDK1.4中,需要使用常量类来模拟枚举的行为。 3. **注解**:Struts2利用注解简化配置,但在JDK1.4中,需要依赖XML配置文件来定义Action、结果和...

    Struts2中的参数传递

    2. **类型转换**:为了确保传入的字符串能够正确地转换为所需的Java对象类型,Struts2提供了内置的类型转换器,并允许用户自定义类型转换逻辑。这一步骤对于确保应用程序的安全性和数据完整性至关重要。 接下来,...

    struts2中类型转换实例代码

    Struts2内建了一套类型转换器,可以处理常见的数据类型转换: 1. **String**:可以将int、long、double、boolean、String数组转换为字符串。 2. **boolean/Boolean**:支持字符串到布尔值的相互转换。 3. **char/...

    Java入门必学实训教程 Java软件开发实战 Java基础、开发框架、类库、web开发 已分类全套共50多份PPT课件.rar

    【课程大纲】 Java基础 1.java入门知识 Java基础 10.枚举与泛型 Java基础 11....Java基础 12....Java基础 13....Java基础 14....struts2_10_转换器 struts2_11_插件 struts2_2_Action详解 struts2_3_配置参数详解

Global site tag (gtag.js) - Google Analytics