我正在尝试将 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()。
最终,我想要完成的是使用枚举构建选择选项,但使其使用正确的资源包和本地。我只是在不可行的事情上浪费时间吗?