Как я могу прочитать содержимое из источника сообщений Spring в Enum? - PullRequest
3 голосов
/ 02 февраля 2010

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

1 Ответ

6 голосов
/ 02 февраля 2010

Я нашел решение из этого ответа на SO: Использование Spring IoC для установки значений перечисления

Это дало мне указатель на использование 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;
        }


    }

...