Я пытаюсь использовать 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, но сделать так, чтобы он использовал правильный набор ресурсов и локальный. Я просто теряю время на то, что это не представляется возможным?
Я бы предложил вам хранить, самое большее, только код сообщения в вашем перечислении. Ваш текущий дизайн очень сильно сочетает ваш enum с средой сервлетов - что, если вы хотите использовать это перечисление в другом месте в будущем? –
Я хотел бы, чтобы этот подход, но форма Spring: опции не позволяют мне устанавливать ярлык с помощью набора ресурсов. Единственный способ, которым я могу это сделать, - это разрешить ключ сообщения в Enum. – CodeChimp