2010-02-02 2 views
3

У меня есть Enum, содержащий три разных типа статуса. Эти статусы должны отображаться в электронном письме, отправленном пользователям, а строки, содержащие статусы, которые будут отображаться, сохраняются в messages.properties (чтение с использованием реализации класса Spring org.springframework.context.MessageSource). Это хорошо работает в обычном контроллере весны. Тем не менее, я бы предпочел получить «статус отображения» в 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; 
     } 


    } 

Как я могу использовать авто-проводной messagesource внутри Enum (или есть какой-то другой способ добиться того, что я пытаюсь)?

ответ

5

Я нашел решение из этого ответа на 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; 
     } 


    } 

+0

Эй, спасибо за ответ - он выглядит так близко к тому, что мне нужно ... однако некоторым моим сообщениям нужны параметры - то есть org.hibernate.validator.constraints.Length.message = длина должна быть между {min} и {max}. Я не думаю, что вы знаете, как это сделать? – laura

+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

Смежные вопросы