Grails problema di convalida riguardante l'associazione multi-dominio?
-
10-10-2019 - |
Domanda
Ho bisogno di convalidare Salva azione tra i 3 domini, qui è il rapporto:
Utente - JobProcess: uno-a-molti, JobProcess - Heatmap:. Uno-a-molti
User { static hasMany = [ jobs : JobProcess ] ... }
JobProcess { static hasMany = [ heatmaps : Heatmap ] ... User script ... }
Heatmap { static belongsTo = JobProcess ... JobProcess job ... }
sto usando eccezioni a flusso convalida di controllo, qui è la mia classe di convalida:
class ValidationException extends RuntimeException {
Object invalidObject
ValidationException(String message, Object invalidObject) {
super(message)
this.invalidObject = invalidObject
}
}
Ho anche costruire una classe di servizio per operazioni di Heatmap astratte (e si lega params dati a oggetto):
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 )
}
}
}
E il mio controller:
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])
}
La mia prima edizione : Non ho alcuna convalida errore utilizzando:? User.save () - il motivo per cui non sono convalida esegue
Posso risolvere questo problema buy aggiornamento se (user.save ()) da:. If (heatmap.validate () && user.save ())
C'è un modo migliore di procedere?
Il mio secondo problema :. Il mio reindirizzamento non determina un'eccezione valida post
Sto reindirizzato a mio avviso creare, ma tutti i miei campi sono vuoti (ho perso tutti i campi di informazione) e senza errori di convalida.
Tuttavia, sto usando il modello: [heatmap: che.invalidObject].
Con l'eccezione, sto passando indietro l'Invalidobject, quindi il mio creare vista dovrebbe visualizzare gli errori di validazione esatte? Che cosa c'è che non va?
Grazie
Soluzione
trovo il mio problema, è a causa della mia vista GSP, stavo usando il fagiolo sbagliato:
<td valign="top" class="value ${hasErrors(bean: heatmapInstance, field: 'project_name', 'errors')}">
Così, ho aggiornato alla heatmap, e ora ho la mia convalida di errore:
<td valign="top" class="value ${hasErrors(bean: heatmap, field: 'project_name', 'errors')}">
Grazie Victor.