Grails 2.3.4 Generato convalida di impalcature
-
20-12-2019 - |
Domanda
Sto cercando di capire come grails 2.3.4 I metodi di impalcatura generati sono di convalida.Ad esempio, questo è quello che è stato generato per il metodo di salvataggio del dominio del mio 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] }
}
}
.
Da ciò che compreso la prima fase di convalida è avvenuta al rilegatura dei dati al parametro Club Clubinstance dell'Azione di salvataggio.Quindi eventuali errori di rilegatura dei dati saranno catturati su se (cluminstance.haserrors ()).
Non vedo alcuna chiamata esplicita a cluminstance.validate () o qualsiasi controllo di errore su cluminstance.Save come suggerisce la documentazione.Sembra funzionare comunque.Quindi, come funziona questo metodo e tornare alla vista se ci sono violazioni vincoli?
Ancora più importante non dovremmo usare i controller di impalcature generati come il modo migliore per fare il carrello di base a Graal?
Soluzione
Quando si includono i parametri nei metodi di azione del controller, i graali eseguiranno il databanting per loro.Per tipi semplici come stringhe, numeri, booleani, ecc. Il nome del parametro è abbinato ai nomi dei parametri e se c'è una corrispondenza e un modo ragionevole per convertire la stringa di parametro nel tipo richiesto, è fatto per te.
Per i tipi complessi, il parametro viene considerato come un oggetto di comando.Se è definito nella classe del controller è effettuato convalidabile al momento della compilazione tramite una trasformazione AST.Se la classe è definita altrove (ad es. SRC / Groovy) deve essere annotata con l'annotazione grails.validation.Validateable
, e se è una classe di dominio, è ovviamente validabile.In ogni caso, dopo che viene creata l'istanza e il rilegato dati, convalida () viene richiesto.