Validación de nulos condicional de Grails o validador personalizado con opción de nul
Tengo un formulario para crear un lugar. Dependiendo del país, el campo de la provincia (estado, región) es obligatorio o no.
Cuando no es necesario, quiero ser nulo, no una cadena vacía. Tengo un código que hace que todos los campos de formulario vacíos, 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()
Ahora, en el dominio del lugar, tengo un validador en la provincia:
province validator: {val, obj -> if (obj.country in obj.requiresRegionCountries() && !obj.province) return [province.required]}
Con esta regla, siempre obtengo "la provincia no puede ser nula", incluso si se requiere o no.
Creo que esto se debe a que el validador anulable que se establece por defecto es falso
Si estoy agregando nullable: true, entonces incluso si se requiere la provincia, el validador personalizado se omite y es posible guardar con la provincia vacía (creo que es porque se crea una instancia con nulo)
Ahora, de alguna manera necesito mi validador personalizado y también la capacidad de especificar el nullable en mi validador, algo como esto:
province validator: {val, obj ->
if (obj.country in obj.requiresRegionCountries() && !obj.province) {
nullable: false
return [province.required] }
else {
nullable: true
}
}
¿Cómo puedo lograr esto en Grails 2.0.3?