Ho un modulo per creare un luogo. A seconda del paese, il campo provincia (stato, regione) è richiesto o meno.Convalida nullable condizionale o validatore personalizzato con opzione nullable
Quando non è necessario, voglio essere null, non stringa vuota. Ho codice che rende tutti i campi modulo vuoti, null:
def newparams = [:]
place = new Place()
params.each() { k, v ->
if (v instanceof String && place.hasProperty(k)) {
if (!v.trim().length()) {
newparams[k] = null
} else {
newparams[k] = v
}
}
}
place = new Place(newparams)
place.validate()
Ora, nel dominio posto, ho un validatore sulla provincia:
province validator: {val, obj -> if (obj.country in obj.requiresRegionCountries() && !obj.province) return [province.required]}
Con questa regola, ho sempre arrivare "provincia non può essere nullo "anche se è richiesto o meno.
Penso che questo sia dovuto al validatore nullable impostato su falso.
Se sto aggiungendo annullabile: vero, allora anche se è richiesto provincia, il validatore personalizzato viene saltato ed è possibile salvare con la provincia di vuoto (credo che sia perché viene istanziato con null)
Ora , ho bisogno di qualche modo il mio validatore personalizzato e anche possibilità di specificare il nullable nel mio validatore, qualcosa di simile:
province validator: {val, obj ->
if (obj.country in obj.requiresRegionCountries() && !obj.province) {
nullable: false
return [province.required] }
else {
nullable: true
}
}
Come posso raggiungere questo obiettivo in Grails 2.0.3?
Grazie per la risposta, ma c'è un problema. Se imposto di essere nullable e place.province è null, la convalida personalizzata viene completamente ignorata. Voglio essere annullabile per alcuni paesi ma non negli altri. – Eduard
Per essere chiari: se non inserisco nullable true e il file è nullo, l'errore "Can not be null" è trown e il mio validatore personalizzato non viene eseguito. Se aggiungo nullable: true e il valore è null, la convalida passerà, il mio validatore personalizzato non verrà eseguito. Voglio essere nullo per alcuni paesi e non nullo per gli altri. Questo è qualcosa che non posso fare con il comportamento attuale. – Eduard
Forse è un errore Grails 2.0.3. Sono in esecuzione 2.0.4 e funziona per me con un semplice progetto demo che ho creato che incollerò alla mia risposta sopra in modo da poter confrontare – Tri