我正在尝试将ENUM用于form:select如下:

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


与一个枚举看起来像:

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()。

最终,我要完成的工作是使用枚举构建选择选项,但要使其使用适当的资源包和本地资源。我只是在浪费时间在不可行的事情上吗?

最佳答案

请参阅我的答案here,了解如何以最少的填充量将依赖项注入枚举。

10-08 19:39