我有一个包含三种不同状态类型的枚举。这些状态应显示在发送给用户的电子邮件中,包含要显示的状态的字符串存储在messages.properties中(使用Spring类org.springframework.context.MessageSource的实现读取)。这在普通的Spring控制器中运行良好。但是,我更愿意在Enum中获得“显示状态”(在一个地方包含逻辑)。
但是,如下面的代码所示,自动将messagesource连接到枚举似乎不起作用,因为messageSource属性始终为空。
public enum InitechStatus{
OPEN("open"), CLOSED("closed"), BROKEN("broken");
public final String name;
@Autowired
private MessageSource messageSource;
InitechStatus(String name) {
this.name = name;
}
@Override
public String toString() {
String displayStatusString = messageSource.getMessage("page.systemadministration.broadcastmail.status."
+ this.name, null, Locale.ENGLISH);
return displayStatusString;
}
}
如何在Enum中使用自动连线的消息源(还是有其他方法来实现我正在尝试的内容)?
答案 0 :(得分:6)
我在SO:Using Spring IoC to set up enum values
上找到了这个答案的解决方案这给了我使用java.util.ResourceBundle读取消息的指针,如下所示:
public enum InitechStatus{
OPEN("open"), CLOSED("closed"), BROKEN("broken");
private static ResourceBundle resourceBundle = ResourceBundle.getBundle("messages",
Locale.ENGLISH);
public final String name;
@Autowired
private MessageSource messageSource;
InitechStatus(String name) {
this.name = name;
}
@Override
public String toString() {
String displayStatusString = resourceBundle.getString("page.systemadministration.broadcastmail.status."
+ this.name);
return displayStatusString;
}
}