Условная валидация 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?

Ответы на вопрос(2)

Ваш ответ на вопрос