Grails enums
El constructor de un enum es privado con el fin de solo crear las constantes del enum dentro de él mismo. Por lo tanto Grails no soporta una enumeración como argumento de accion, para que haga databinding se necesita que el enum esté dentro de un command object.
Si se desea hacer un databinding directamente del enum sin un command object:
class TestController {
def index() {
}
def formSubmit() {
def personType = PersonType.valueOf(params.personType)
log.debug("personType=$personType")
redirect action: "index"
}
}
enum PersonType {
ADULTO, NINO
}
<g:form action="formSubmit">
<g:hiddenField name="personType" value="${us.incorpora.sigrem.PersonType.ADULTO}" />
<g:submitButton name="enviar"/>
</g:form>
Con este plugin se pueden traducir los textos de los enums de acuerdo al locale.
Para traducir un objeto enum desde código:
g.message(message: StatusMembresia.CANCELADA)
<g:form>
<label>
<g:radio name="tipoPago" value="${TipoPago.DEPOSITO}"/> <g:message message="${TipoPago.DEPOSITO}"/>
</label>
<g:actionSubmit value="enviar" action="send"/>
</g:form>
El controlador podrá tener un command con el enum dentro para un binding automático, o se podrá utilizar el binding de Enum sin command como se describe arriba.
El enum debe tener la anotación @I18nEnum
<g:select name="accionesMembresia" from="${us.incorpora.sigrem.enums.AccionesMembresia.values()}"/>
<g:select name="tipoPago" from="${TipoPago.values()}" keys="${TipoConceptoPago.values()*.name()}" />
El controlador podrá tener un command con el enum dentro para un binding automático, o se podrá utilizar el binding de Enum sin command como se describe arriba.