Usando enums con Grails

Hay 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.

Etiquetas: ,

Una respuesta a “Usando enums con Grails”

  1. Armando Sanchez Dice:

    hola man gracias por tu informacion, la verdad es que para esto de grails no hay mucha informacion en español, y con tu ejemplo he comprendido bastante el uso de enum, espero que puedas seguir apoyando a la comunidad, saludos desde Mexico

Escribir respuesta