将MessageSource注入枚举



我试图使用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。在所有情况下,当我进入getResourceBundleLable()中时,messageSource是空的。

最终,我试图完成的是使用Enum构建选择选项,但使其使用适当的资源束和本地。我是在浪费时间做一些不可行的事情吗?

关于如何以最少的管道将依赖项注入枚举,请参阅我的回答。

你也可以在这里看到我的答案。它不是不注入它,而是把它作为一个静态方法使用。

最新更新