Usando enums con Grails
Sábado, Noviembre 7th, 2009Hay ocasiones en que necesitamos utilizar datos enumerados que son fijos en nuestras aplicaciones y por lo tanto crear una clase de dominio para tal fin sería talvez un poco excesivo. Grails permite utilizar las enumeraciones de Groovy para declarar un tipo de datos con valores fijos y poder hacer uso de él desde otras clases de nuestro sistema.
Para nuestro ejemplo veremos el caso de un Alumno, que sabemos que incluye varios campos incluyendo una de Sexo; veamos de qué forma podemos definir la clase Alumno con un atributo enumerado de tipo Sexo:
Primero creamos el tipo enumerado Sexo:
public enum Sexo {
FEMENINO('Femenino'),
MASCULINO('Masculino')
String nombre
Sexo(String nombre) {
this.nombre = nombre
}
static list() {
[FEMENINO, MASCULINO]
}
}Posteriormente creamos la clase Alumno, que hará uso de la enumeración anterior
class Alumno {
String nombre
Date fechaNacimiento
Sexo sexo
String grupo
// Omitimos el resto de la clase por cuestiones de simplicidad
}Con esto, GORM (el motor de mapeo de objeto-relación de Grails) automáticamente mapeará el valor de la propiedad Sexo a la columna de la tabla del Alumno. Por lo tanto, si le asignamos el valor de Sexo.MASCULINO a una instancia de Alumno, se guardará en la base de datos ‘Masculino’. Para usarlo en nuestras vistas no tenemos que hacer nada en especial, podemos usarlo de la siguiente manera:
<g:select name="sexo" id="sexo" from="${Sexo.list()}"
value="${fieldValue(bean: usuario, field: 'sexo')}" optionValue="nombre"/>No se necesita realizar nada en especial dentro del controlador de la clase Alumno. Definitivamente es un código mucho más sencillo y corto que si lo hubiéramos hecho con Java.
