Условная валидация Grails или пользовательский валидатор с параметром 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()
Теперь в домене мест у меня есть валидатор по провинции:
province validator: {val, obj -> if (obj.country in obj.requiresRegionCountries() && !obj.province) return [province.required]}
С этим правилом я всегда получаю "провинция" не может быть нулевой " даже если это требуется или нет.
Я думаю, что это потому, что обнуляемый валидатор, который по умолчанию установлен в false.
Если я добавляю nullable: true, то даже если требуется провинция, пользовательский валидатор пропускается, и его можно сохранить с пустой провинцией (я думаю, это потому, что его экземпляр создается с нулем)
Теперь мне нужно как-то мой пользовательский валидатор, а также возможность указать обнуляемое значение в моем валидаторе, что-то вроде этого:
province validator: {val, obj ->
if (obj.country in obj.requiresRegionCountries() && !obj.province) {
nullable: false
return [province.required] }
else {
nullable: true
}
}
Как я могу добиться этого в Grails 2.0.3?