`
longgangbai
  • 浏览: 7339048 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在Struts2.0 中将Enum对象与组件的绑定

阅读更多

  在项目使用一个下拉框绑定或单选或复选框的绑定的应用:

 

在struts2.0中一个复选库可以选中多个但是真正的保存的只是数据而非enum对象。

在工具类中编写一个类实现枚举对象值和数据库对象的绑定:

public abstract class PersistenceUtils {
 
 /**
  *
  */
 private static final String DEFAULT_ENUM_IDENTITY_PROPERTY = "code";
 
 /**
  *
  */
 public static final String SEPERATOR = ",";

 public static <T extends Enum<T>> List<T> getEnumsAsList(Class<T> enumClass, String identityProperty, String enumString) {
  if (StringUtils.isBlank(enumString)) {
   return new ArrayList<T>();
  }
  List<T> enumList = new ArrayList<T>();
  String[] fragments = StringUtils.split(enumString, SEPERATOR);
  try {
   for (String fragment : fragments) {
    Field identityField = BeanUtils.getDeclaredField(enumClass, identityProperty);
    enumList.add(EnumUtils.fromEnumProperty(enumClass, identityProperty,
      ConvertUtils.convert(fragment, identityField.getType())));
   }
  } catch (NoSuchFieldException e) {
   ReflectionUtils.rethrowRuntimeException(e);
  }
  return enumList;
 }
 
 public static <T extends Enum<T>> List<T> getEnumsAsList(Class<T> enumClass, String enumString) {
  return getEnumsAsList(enumClass, DEFAULT_ENUM_IDENTITY_PROPERTY, enumString);
 }
 
 @SuppressWarnings("unchecked")
 public static <T extends Enum<T>> String getEnumsToString(Class<T> enumClass, final String identityProperty, List<T> enums) {
  if (CollectionUtils.isNotEmpty(enums)) {
   Collection<String> enumStrings = CollectionUtils.collect(enums, new Transformer() {
    @Override
    public Object transform(Object input) {
     try {
      Object identity = BeanUtils.getDeclaredFieldValue(input, identityProperty);
      return ConvertUtils.convert(identity, String.class);
     } catch (NoSuchFieldException e) {
      ReflectionUtils.rethrowRuntimeException(e);
      //never to here
      return null;
     }
    }
   });
   return StringUtils.join(enumStrings, SEPERATOR);
  }
  return null;
 }
 
 public static <T extends Enum<T>> String getEnumsToString(Class<T> enumClass, List<T> enums) {
  return getEnumsToString(enumClass, DEFAULT_ENUM_IDENTITY_PROPERTY, enums);
 }

}
在使用是如下:

将得到的枚举字符串voteTypes,转换为所需的枚举对象集合

public List<FunTicketType> getVoteTypeAsList() {
  return PersistenceUtils.getEnumsAsList(FunTicketType.class,
    this.voteTypes);
 }

 

 将枚举集合转换为所需的枚举字符串

 public void setVoteTypeAsList(List<FunTicketType> voteTypeAsList) {
  this.voteTypes = PersistenceUtils.getEnumsToString(FunTicketType.class,
    voteTypeAsList);
 }

 

在struts2.0 的IOC功能的强大也就显示出来了:

Model层的Set方法注入:

 

 

在jsp页面中实现如下:

  单选组:         

 <s:radio name="entity.tableType"
           list="@com.unutrip.user.model.enums.DinnerType@values()"
           listKey="code" listValue="name" />

 

下拉框:

 <s:select name="entity.noticeType"
           list="@com.unutrip.user.model.enums.NoticeModeType@values()"
           listKey="code" listValue="name" />

复选框:

           <s:checkboxlist name="entity.voteTypeAsList"
            list="@com.unutrip.user.model.enums.FunTicketType@values()"
            listKey="code" listValue="name" />

分享到:
评论

相关推荐

    WPF 中一组 RadioButton 向 Enum 的绑定

    其中一个常见的需求是将RadioButton组与枚举类型(Enum)进行绑定,以便用户通过选择不同的RadioButton来设置某个属性的值。枚举是一种强大的数据类型,它允许我们定义一组具有特定名称的常量,这些常量通常代表某种...

    TC2.0绿色版(经典珍藏版)

    TC2.0,全称Turbo C 2.0,是DOS环境下的一款经典C语言编译器,由Borland公司开发。它在80年代末至90年代初非常流行,尤其对于初学者来说,是入门C语言编程的理想工具。这个"TC2.0绿色版"是一个精简版,方便用户快速...

    DataGridComboBoxColumn 通过XAML绑定示例 含Enum的绑定

    本示例主要探讨如何通过XAML来实现DataGridComboBoxColumn与Enum的绑定,从而为用户提供预定义的枚举值选择。 首先,我们需要创建一个Enum,这将作为ComboBox的选项来源。例如,我们可以定义一个名为`ColorEnum`的...

    WPF绑定Enum的例子

    在这个例子中,`ItemsSource`属性绑定了Enum的所有值,`DisplayMemberPath`和`SelectedValuePath`用于显示和获取Enum的名称,而`SelectedValue`则绑定了ViewModel中的一个Enum属性,使用`EnumToStringConverter`进行...

    根据Enum绑定DropDownList

    在.NET框架中,枚举(Enum)是一种强大的工具,它允许我们定义一组命名常量,这些常量在程序中代表特定的值。在许多场景下,枚举与UI控件如DropDownList结合使用,可以方便地展示选项并进行数据交互。本篇文章将深入...

    在wpf中把枚举显示在combobox中

    本项目展示了如何将枚举类型绑定到WPF的ComboBox控件,使得枚举值能够在UI中方便地展示和交互。 首先,枚举(Enum)在C#中是一种强大的工具,用于定义一组相关的常量。它们有助于提高代码的可读性和可维护性。例如...

    Options:有时在某些情况下,您想在OptionSet中使用Enum或希望Enum由Raw的Int类型支持,但同时也具有String标签

    目录介绍特征安装用法设置一个MappedValueRepresentable枚举使用MappedValueCollectionRepresented 使用MappedEnum类型的可编码枚举在ESet中使用OptionSet中的EnumSet 将EnumSet转换为Enum数组使用...

    WPF CheckBox绑定枚举数据源(数据列表)

    WPF在MVVM模式下通过Converter控制不同CheckBox对应不同枚举类型勾选,比如我现在描述一个人有八种行为,这八种行为分别通过8个CheckBox来标识,如果存在这种行为则勾选,不存在则不勾选

    obj-c2.0大全

    - **泛型编程**:Obj-C2.0中通过`NS_TYPED_ENUM`等宏支持基本类型的泛型编程。 - **类型安全**:通过编译器检查增强了类型安全性,减少了运行时错误。 #### 七、动态特性 - **动态消息发送**:Obj-C的核心特性之一...

    Struts2中的参数传递

    在Struts2中,这些参数可以直接通过表单元素的`name`属性与Action类中的属性相匹配,无需额外配置即可实现自动绑定。 例如,下面的HTML代码展示了一个简单的表单,其中包含了一个文本框和一个下拉框,分别用于输入...

    Java enum的用法详解

    在Java编程语言中,`enum`(枚举)是一种特殊的类,用于定义一组固定的常量。这个特性在很多场合下非常有用,比如表示状态、角色、颜色等有限且不变的集合。本文将深入探讨Java `enum`的用法,包括其基本概念、创建...

    enum类型重定义解决方法

    然而,在某些情况下,我们可能会遇到`enum`类型的重定义问题,这通常发生在包含不同库或者头文件时,因为这些库可能已经定义了自己的`enum`类型,与我们的代码冲突。在给定的描述中,我们看到的是一个在使用ADO...

    enum类型被intent所携带时各种情况的示例代码

    在Android开发中,Intent是用来在组件之间传递数据的重要工具,它可以携带各种类型的数据,包括基本类型、字符串、Parcelable对象等。然而,对于enum(枚举)类型,由于它不是Android系统默认支持的数据传递类型,...

    ATL 演示实例enum,collection,event,win

    集合在COM组件中通常用来表示一组相关的对象。`collection.zip`可能包含使用ATL的集合类模板(如`CAtlArray`、`CAtlList`或`CAtlMap`)创建自定义集合类的实例。这些类提供了一组通用的操作方法,如添加、删除、查找...

    EnumTools_v1_3_Ninject_dependency_enumtools_

    7. `EnumTools\EnumItemTypeConverter.cs`:这个类可能实现了枚举项类型转换器,使得枚举值能在不同的数据类型之间转换,这在UI展示或者数据绑定时非常有用。 8. `EnumTools.Demo\Properties\Resources.Designer.cs...

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

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括数据绑定、类型转换、动作映射等。在处理用户输入时,Struts2框架会自动将HTTP请求参数转换为Action类的属性,这就是所谓的类型转换。在这个...

    C++中枚举类型(enum)

    在C++编程语言中,枚举(`enum`)是一种用户定义的类型,它由一组具有整数值的命名常量组成。这些值可以被程序用来代替数字,使代码更具可读性,并且能够表示特定范围内的固定集合。 #### 枚举类型的定义与使用 ...

    Java枚举类型Enum的用法

    在枚举内部,可以通过`Enum&lt;E extends Enum&lt;E&gt;&gt;`的泛型方法`getDeclaringClass()`获取枚举常量所属的枚举类,以及`name()`和`ordinal()`方法获取常量的名称和在枚举中的位置。 总结来说,Java枚举类型提供了一种...

    swift2.0新特性

    Swift 2.0是苹果公司在2015年推出的编程语言Swift的更新版本,它在原有的基础上进行了大量的改进和完善。Swift是一种编译型、强类型、面向对象和函数式编程的编程语言,它是苹果公司为了替代Objective-C而开发的,...

    enum 结构分析源码

    枚举(enum)在编程语言中是一种非常基础且重要的数据类型,它允许程序员定义一组预定义的常量,这些常量通常表示特定的值或状态。在这个“enum 结构分析源码”资源中,我们主要关注的是C语言中的枚举使用和实现。...

Global site tag (gtag.js) - Google Analytics