Walidacja warunkowa z zerową wartością Grails lub walidator niestandardowy z opcją null
Mam formularz do utworzenia miejsca. W zależności od kraju wymagane jest pole prowincji (stan, region).
Kiedy nie jest wymagane, chcę mieć wartość NULL, a nie pusty łańcuch. Mam kod, który powoduje, że wszystkie puste pola formularza są puste:
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()
Teraz w domenie miejsca mam walidator w prowincji:
province validator: {val, obj -> if (obj.country in obj.requiresRegionCountries() && !obj.province) return [province.required]}
Z tą regułą zawsze dostaję „prowincja nie może być zerowa”, nawet jeśli jest wymagana.
Myślę, że to dlatego, że walidator, który jest ustawiony domyślnie na false.
Jeśli dodam wartość pustą: true, to nawet jeśli wymagana jest prowincja, niestandardowy walidator jest pomijany i możliwe jest zapisanie z pustą prowincją (myślę, że to dlatego, że jest tworzony z wartością null)
Teraz potrzebuję w jakiś sposób mojego niestandardowego walidatora, a także możliwości określenia wartości dopuszczalnej w moim walidatorze, coś takiego:
province validator: {val, obj ->
if (obj.country in obj.requiresRegionCountries() && !obj.province) {
nullable: false
return [province.required] }
else {
nullable: true
}
}
Jak mogę to osiągnąć w Grails 2.0.3?