将MessageSource注入枚举

时间:2013-05-21 19:19:05

标签: java spring spring-ioc

我正在尝试将ENUM用于表单:选择如下:

<form:select path="myEnum">
  <form:options itemLabel="resourceBundleLabel" />
</form:select>

Enum看起来像:

public enum MyEnum {
  ONE("rb.one"), TWO("rb.two");

  private MessageSource messageSource;

  private String rbKey;

  public String getResourceBundleLabel() {
    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    Locale locale = request.getLocale();
    return messageSource.getMessage(this.rbKey, null, locale);
  }

  public MyEnum(String rbKey) {
    this.rbKey = rbKey;
  }
}

问题是我似乎无法弄清楚如何注入MessageSource。我尝试添加@Component和@Autowired(因为没有默认构造函数而出错。然后我尝试将@Component转换为@Configurable。然后我尝试删除两个注释,并实现MessageSourceAware。在所有情况下,当我发布时,messageSource为null进入getResourceBundleLable()。

最终,我想要完成的是使用Enum构建选择选项,但要使用正确的资源包和本地。我只是在浪费时间在一些不可行的事情上吗?

2 个答案:

答案 0 :(得分:2)

请参阅我的回答here,了解如何使用最少的管道将依赖项注入枚举。

答案 1 :(得分:0)

您还可以在here中查看我的答案。它不会注入它,而是将其用作静态方法。