lunes, 8 de septiembre de 2008

Grails - Objetos Command

Hay veces que necesitamos mapear propiedades para actualizar una clase del dominio que no necesariamente se corresponden con el mismo, o tenemos interacciones que ni siquiera utilizan una clase. 
Incluso en estos casos nos facilita la tarea las validaciones y data bindings de grails. Para utilizar estas facilidades debemos recurrir a las clases Command.
En el siguiente ejemplo usaremos un objeto Command para cambiar un password en el ámbito de un controlador de Usuario.
El primer paso es crear una clase PasswordCommand (podemos incluso crearla dentro del mismo archivo en donde tenemos nuestro controlador).

class PasswordCommand {
    String password_actual
    String password_nuevo
    String password_confirmacion    

static constraints = {
password_nuevo(blank:false, minSize:6)
}
}

Esa clase es como cualquiera del dominio, podemos definir las costraints que queramos. Luego sólo falta utilizarla en la acción que necesitemos, en este caso en la acción cambiarPassword:

class UsuarioController{
def cambiarPassword = {PasswordCommand cmd ->
if(!cmd.hasErrors()){
//procesar
}
}
}


Al definir así nuestra acción, Grails creará una instancia de PasswordCommand, haciendo binding de las propiedades que vienen en el request.

Como verán no es un trabajo muy complicado y nos ahorra el trabajo de validar "manualmente" esos parámetros que quedan fuera del dominio.