在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" />

你可能感兴趣的:(jsp,IOC)