Используя значение enum в g: выберите, когда enum является атрибутом объекта выбора

Пример:

batchTag - это атрибут с перечислением типа batchRange со значениями:

JAN1 "January Biweekly 1",
JAN2 "January Biweekly 2",

и др.

Я хочу отобразить значение VALUE для пакета BatchTag в select, IOW, select должен содержать

"January Biweekly 1"
"January Biweekly 2" ...

не

JAN1
JAN2
FEB1
FEB2
FEB3 ...

Я попытался несколько вещей в g: выберите, чтобы сделать это, но без каких-либо успехов. Я подумал, что, возможно, "это" будет доступно как часть g: select (так как это явно итерация) и попытался ссылаться на it.batchTag.name для опцииValue, но это не сработало. Любые предложения?

Спасибо!

Ответ 1

enum BatchRange {
    JAN1 "January Biweekly 1",
    JAN2 "January Biweekly 2",

    final String value

    BatchRange(String value) { this.value = value }

    String toString() { value } 
    String getKey() { name() }
}

Обратите внимание на метод getKey(). И затем ваш g: выберите

<g:select name="batch" from="${BatchRange.values()}" optionKey="key" />

или

<g:select name="batch" from="${BatchRange.values()}" keys="${BatchRange.values()*.name()}" />

Ответ 2

Лучшим подходом было бы использовать сообщения i18n в этом случае. Существует два варианта:

  • Добавить значениеMessagePrefix в select.
  • Сделайте enum реализовать org.springframework.context.MessageSourceResolvable, как описано в этот пост в блоге.

Подробнее см. этот вопрос.