0

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

<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。在所有情况下,当我进入 getResourceBundleLable()。

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

4

2 回答 2

2

请参阅我的答案了解如何以最少的管道将依赖项注入枚举。

于 2013-05-24T16:30:30.753 回答
0

你也可以在这里看到我的回答。它不会注入它,而是将其用作静态方法。

于 2015-03-19T11:12:35.393 回答