Je dois valider l'action de sauvegarde entre 3 domaines, voici la relation:Problème de validation Grails sur une association multi-domaine?
Utilisateur - JobProcess: un-à-plusieurs, JobProcess - Heatmap: un-à-plusieurs.
User { static hasMany = [ jobs : JobProcess ] ... }
JobProcess { static hasMany = [ heatmaps : Heatmap ] ... User script ... }
Heatmap { static belongsTo = JobProcess ... JobProcess job ... }
J'utilise des exceptions pour contrôler le flux de validation, voici ma classe de validation:
class ValidationException extends RuntimeException {
Object invalidObject
ValidationException(String message, Object invalidObject) {
super(message)
this.invalidObject = invalidObject
}
}
Je construis aussi une classe de service aux opérations abstraites HeatMap (et se fixe params données objet):
def addJob(params) {
def user = User.findById(params.user_id)
if (user) {
def heatmap = new Heatmap(params)
def process = new JobProcess(params)
process.addToHeatmaps(heatmap)
user.addToJobs(process)
if (user.save()) {
return heatmap
} else {
throw new ValidationException("Invalid form", heatmap)
}
}
}
Et mon contrôleur:
try {
def heatmap= HeatmapService.addJob(params)
flash.message = "Running new process : $heatmap.job}"
redirect(uri:'/')
} catch (ValidationException che) {
flash.message = "Validation Failed ${che.message}"
render(view:'create', model:[heatmap:che.invalidObject])
}
Mon premier numéro: Je n'ai aucune validation d'erreur en utilisant: user.save() - pourquoi aucune validation n'est effectuée?
Je peux résoudre ce problème acheter la mise à jour if (user.save()) par: if (heatmap.validate() & & user.save()).
Y a-t-il une meilleure façon de procéder?
Mon deuxième numéro: ma redirection ne déclenche pas d'exception post-invalide.
Je suis redirigé vers ma vue de création, mais tous mes champs sont vides (j'ai perdu tous les champs d'information) et aucune erreur de validation.
Néanmoins, j'utilise model: [heatmap: che.invalidObject].
A l'exception, je repasse l'objet invalidObject, donc mon affichage de création devrait afficher les erreurs de validation exactes? Qu'est-ce qui ne va pas ?
Merci
1. Pouvez-vous également citer le validateur violé? 2. Pouvez-vous aussi essayer de rendre juste une $ heatmap visible et voir ce qu'il y a? Ressemble plus à une faute de frappe. –