2013-05-21 3 views
0

Я пытаюсь использовать ENUM для формы: выбрать, как например:Инъекционное MessageSource в Enum

<form:select path="myEnum"> 
    <form:options itemLabel="resourceBundleLabel" /> 
</form:select> 

С Enum, который выглядит примерно так:

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. Во всех случаях messageSource имеет значение null, когда я войдите в getResourceBundleLable().

В конечном итоге то, что я пытаюсь выполнить, состоит в том, чтобы выстроить параметры выбора с помощью Enum, но сделать так, чтобы он использовал правильный набор ресурсов и локальный. Я просто теряю время на то, что это не представляется возможным?

+1

Я бы предложил вам хранить, самое большее, только код сообщения в вашем перечислении. Ваш текущий дизайн очень сильно сочетает ваш enum с средой сервлетов - что, если вы хотите использовать это перечисление в другом месте в будущем? –

+0

Я хотел бы, чтобы этот подход, но форма Spring: опции не позволяют мне устанавливать ярлык с помощью набора ресурсов. Единственный способ, которым я могу это сделать, - это разрешить ключ сообщения в Enum. – CodeChimp

ответ

2

Смотрите мой ответ here о том, как придать зависимостей в перечислениях с минимальной водопроводным.

0

вы с а также см. мой ответ в here. Он не вводит его, а использует его как статический метод.

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