Validação condicional anulável do Grails ou validador customizado com opção anulável
Eu tenho um formulário para criar um lugar. Dependendo do país, o campo da província (estado, região) é obrigatório ou não.
Quando não é necessário, eu quero ser nulo, não string vazia. Eu tenho código que faz todos os campos de formulário vazios, nulo:
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()
Agora, no domínio do lugar, tenho um validador na província:
province validator: {val, obj -> if (obj.country in obj.requiresRegionCountries() && !obj.province) return [province.required]}
Com essa regra, sempre consigo "província não pode ser nula", mesmo que seja necessária ou não.
Eu acho que isso é porque o validador anulável que é definido como padrão para false.
Se eu estou adicionando anulável: true, então, mesmo se a província for necessária, o validador customizado será ignorado e será possível salvar com a província vazia (acho que é porque é instanciado com null)
Agora, eu preciso de alguma forma meu validador personalizado e também a capacidade de especificar o anulável no meu validador, algo como isto:
province validator: {val, obj ->
if (obj.country in obj.requiresRegionCountries() && !obj.province) {
nullable: false
return [province.required] }
else {
nullable: true
}
}
Como posso conseguir isso no Grails 2.0.3?