Pregunta

Estoy tratando de comprender cómo realizan la validación los métodos de andamiaje generados por Grails 2.3.4.Por ejemplo, esto es lo que se generó para el método de guardar el dominio de mi Club:

def save(Club clubInstance) {
    if (clubInstance == null) {
        notFound()
        return
    }

    if (clubInstance.hasErrors()) {
        respond clubInstance.errors, view:'create'
        return
    }

    clubInstance.save flush:true

    request.withFormat {
        form {
            flash.message = message(code: 'default.created.message', args: [message(code: 'clubInstance.label', default: 'Club'), clubInstance.id])
            redirect clubInstance
        }
        '*' { respond clubInstance, [status: CREATED] }
    }
}

Por lo que tengo entendido, la primera fase de validación ocurrió cuando los datos se vincularon al parámetro Club clubinstance de la acción de guardar.Por lo tanto, cualquier error de enlace de datos se detectará en if (clubInstance.hasErrors()).

No veo ninguna llamada explícita a clubInstance.validate() ni ninguna verificación de errores en clubInstance.save como sugiere la documentación.Sin embargo, parece funcionar.Entonces, ¿cómo valida este método y regresa a la vista si hay violaciones de restricciones?

Más importante aún, ¿no deberíamos utilizar los controladores de andamios generados como la mejor forma de realizar CRUD básico en Grails?

¿Fue útil?

Solución

Cuando incluye parámetros en los métodos de acción del controlador, Grails los vinculará.Para tipos simples como cadenas, números, booleanos, etc.el nombre del parámetro se compara con los nombres de los parámetros y, si hay una coincidencia y una forma sensata de convertir la cadena del parámetro al tipo solicitado, ya está hecho.

Para tipos complejos, el parámetro se trata como un objeto de comando.Si está definido en la clase de controlador, se vuelve validable en tiempo de compilación mediante una transformación AST.Si la clase está definida en otro lugar (p. ej.src/groovy) tiene que estar anotado con el grails.validation.Validateable anotación, y si es una clase de dominio, entonces obviamente es validable.En cualquier caso, después de crear la instancia y vincular los datos, se llama a validar().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top