2010-02-02 39 views
3

我有一个枚举包含三种不同的状态类型。这些状态应显示在发送给用户的电子邮件中,并且包含要显示的状态的字符串存储在messages.properties中(使用Spring类org.springframework.context.MessageSource的实现读取)。这在正常的Spring控制器中运行良好。但是,我更喜欢在Enum中获得“显示状态”(将逻辑包含在一个地方)。如何在Enum中从Spring Messagesource读取内容?

但是,如下面的代码自动将消息源连接到enum似乎不起作用,因为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中使用自动连接的消息源(或者是否有其他方法来实现我所尝试的)?

回答

5

我发现从这个答案对这样的解决方案: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; 
     } 


    } 

+0

嘿,感谢答案 - 它看起来非常接近我需要的...但是,我的一些消息需要params - 即org.hibernate.validator.constraints.Length.message = length必须介于{min}和{max}之间。我不认为你知道这个方法吗? – laura 2012-02-23 17:21:10

+0

为了达到这个目的,你可以使用java.text.MessageFormat(http://docs.oracle.com/javase/6/docs/api/java/text/MessageFormat.html)。另请参阅http://docs.oracle.com/javase/tutorial/i18n/format/messageFormat.html – simon 2012-02-24 12:14:06