我试图使用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构建选择选项,但使其使用适当的资源束和本地。我是在浪费时间做一些不可行的事情吗?
关于如何以最少的管道将依赖项注入枚举,请参阅我的回答。
你也可以在这里看到我的答案。它不是不注入它,而是把它作为一个静态方法使用。