Это более простое решение без необходимости генерировать представления, т.е. не нужно изменять edit.gsp
и create.gsp
. Просто используйте плагин fields , как предложено @ jeff-scott-brown.
Предположим, что это класс вашего домена:
package mypackage
class MyClass {
// ...
// properties
// ...
Set<MyEnumeration> enumerations
// no need to declare it as embedded
// static embedded = ['enumerations']
}
enum MyEnumeration {
ENUM_VALUE_1,
ENUM_VALUE_2,
ENUM_VALUE_3
}
И что вы создали скаффолд контроллер для него, т.е.
package mypackage
class MyClassController {
static scaffold = MyClass
}
Единственное, что вам нужно сделать, это создать файл grails-app/views/_fields/myClass/enumerations/_widget.gsp
со следующим содержимым:
<g:select
multiple="true"
name="${property}"
from="${mypackage.MyEnumeration}"
value="${myClass?.enumerations}"
/>
Он также работает, если вы объявляете коллекцию перечислений как hasMany
ассоциация, то есть
package mypackage
class MyClass {
// ...
// properties
// ...
static hasMany = [enumerations:MyEnumeration]
}
enum MyEnumeration {
ENUM_VALUE_1,
ENUM_VALUE_2,
ENUM_VALUE_3
}