Command Objects para validaciones de formularios
Llevo unos días jugando un poco con Grails y es un framework que estoy viendo bastante interesante, como también ir aprendiendo groovy.
La cuestión es que después de ir probando diferentes cosas del framework, y ver la facilidad que dan los constraints para las validaciones en las clases del dominio, pensé la situación de registro de un usuario. En esta situación, se suele utilizar un segundo campo para confirmar la contraseña, por lo que no podía validar esta situación en los constraints de la clase de dominio del usuario ya que password2 no forma parte de él.
La solución es utilizar los Command Objects, que tal y como dice la documentación sería algo como los form bean en struts. Estas clases se suelen declarar en el mismo fichero que el Controller que lo va a utilizar, y se definen los constraints de la misma forma que en las clases del dominio.
En mi caso, necesitaba comparar dos parámetros del formulario, para esto debía usar un constraint propio:
password1( validator: {
val, obj ->
obj.password2 == val
})
La validación se hace sobre password1, val es password1, obj -> es MiCommandObject y con obj.password2==val vemos si son iguales. Esto es porque si el clousure recibe dos parámetros, el primero toma el valor y el segundo el objeto de referencia(en este caso el Command Object).
Mi conclusión en cuanto a la documentación oficial de Grails, es que ya hay bastante cantidad de información pero en algunos momentos demasiado dispersa.