Question

J'essaie de comprendre comment les méthodes d'échafaudage générées par Grails 2.3.4 effectuent la validation.Par exemple, voici ce qui a été généré pour la méthode de sauvegarde de mon domaine 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] }
    }
}

D'après ce que j'ai compris, la première phase de validation s'est produite lors de la liaison des données au paramètre Club clubinstance de l'action de sauvegarde.Ainsi, toutes les erreurs de liaison de données seront détectées sur le if (clubInstance.hasErrors()).

Je ne vois aucun appel explicite à clubInstance.validate() ni aucune vérification d'erreur sur clubInstance.save comme le suggère la documentation.Cela semble cependant fonctionner.Alors, comment cette méthode valide-t-elle et revient-elle à la vue en cas de violations de contraintes ?

Plus important encore, ne devrions-nous pas utiliser les contrôleurs d'échafaudage générés comme la meilleure façon de faire du CRUD de base dans Grails ?

Était-ce utile?

La solution

Lorsque vous incluez des paramètres dans les méthodes d'action du contrôleur, Grails effectuera la liaison de données pour eux.Pour les types simples comme les chaînes, les nombres, les booléens, etc.le nom du paramètre est comparé aux noms des paramètres et s'il existe une correspondance et un moyen judicieux de convertir la chaîne de paramètres en type demandé, c'est fait pour vous.

Pour les types complexes, le paramètre est traité comme un objet de commande.S'il est défini dans la classe du contrôleur, il est rendu validable au moment de la compilation via une transformation AST.Si la classe est définie ailleurs (par ex.src/groovy), il doit être annoté avec le grails.validation.Validateable annotation, et s'il s'agit d'une classe de domaine, elle est évidemment validable.Dans tous les cas, une fois l'instance créée et liée aux données, validate() est appelée pour vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top