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