Как обеспечить логическое поле в Grails? - PullRequest
1 голос
/ 18 ноября 2010

Я хочу убедиться, что проверено одно из двух полей формы, представляющих логическое значение. Но нет подходящего ограничения для этого. nullable: false не работает.

class Organisation {

    Boolean selfInspecting

    static constraints = {
        selfInspecting(nullable: false)
    }

}

Как я могу проверить, проверено ли одно из двух полей или нет?

Ответы [ 3 ]

3 голосов
/ 18 ноября 2010

Возможно, самый простой подход - это использовать форму, которая обеспечивает выбор значения.Таким образом, создание переключателей вместо флажков является лучшим решением.Это также напрямую отражает ваши намерения.

2 голосов
/ 19 ноября 2010

Вы также можете проверить это в контроллере, например,

if (params.checkBox1 != 'on' && params.checkBox2 != 'on')
  flash.error = 'At least one value must be checked.'
  return ...
1 голос
/ 18 ноября 2010

вы можете написать свой собственный валидатор.

что-то вроде

selfInspecting(validator: {val, obj -> /*test selfInspecting here*/})

РЕДАКТИРОВАТЬ - в ответ на другой ответ - вы можете обработать это в форме, но вы должны также обработать это на сервере.

ДРУГОЕ РЕДАКТИРОВАНИЕ. В комментарии было предложено проверить одно из двух полей в классе вашего домена. Это также легко сделать с помощью специального валидатора. С подписью выше для пользовательского закрытия валидатора val является значением selfInspecting, а obj является экземпляром объекта домена. Таким образом, вы могли бы иметь

{ val, obj ->

    if (val == null) return false // if you want to ensure selfInspecting is not null
    else return true

    ... or ...

    // if you want to check that at least 1 of two fields is not null
    def oneOrTheOther = false
    if (obj.field1 != null || obj.field2 != null) 
       oneOrTheOther = true
    return oneOrTheOther

}
...