我正在尝试将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构建选择选项,但要使用正确的资源包和本地。我只是在浪费时间在一些不可行的事情上吗?