Условная проверка Grails, допускающая значение NULL, или пользовательский валидатор с параметром, допускающим значение 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]}

С этим правилом я всегда получаю «провинция не может быть нулевой», даже если требуется это или нет.

Я думаю, это связано с тем, что для валидатора, допускающего значение 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?

6
задан Eduard 29 May 2012 в 08:21
поделиться