Grails — командный объект, настраиваемый условный валидатор

Я хотел бы создать настраиваемый валидатор в моем объекте Command, чтобы убедиться, что поле email address формы не будет пустым, если выбрано notifyMe checkbox.

Вот моя последняя попытка реализовать это:

email(blank: true, nullable: true, email: true,
                  validator: {email, creditProviderCommand ->
                              if (creditProviderCommand.notifyMe == 'on')
                                    return email.size() > 0})

Я пробовал также с email != null и email != '', но это не работает в обоих случаях, а это означает, что отправка формы принимается, даже если отмечен notifyMe checkbox, а поле email address оставлено пустым.

Код действия правильно обрабатывает ошибку проверки (даже уникальное ограничение). Есть идеи, что я делаю неправильно?

Большое спасибо за Вашу помощь.


person Alexandre Bourlier    schedule 05.09.2011    source источник
comment
Какой тип notifyMe, boolean или String? Какое значение ему присваивается на самом деле? Я полагаю boolean или Boolean, так что нужно просто проверить на истинность, а не на 'on'.   -  person Victor Sergienko    schedule 05.09.2011


Ответы (1)


Код выше выглядит хорошо для меня. Вы на 100% уверены, что creditProviderCommand.notifyMe == 'on' при установленном флажке?

отправка формы принимается даже с установленным флажком notifyMe

Отправка формы всегда будет принята, даже если есть ошибки проверки. Вы несете ответственность за проверку ошибок проверки и решение, что делать, если проверка не удалась, например.

def myAction = {MyCommand cmd ->

  if (cmd.validate()) {
    // code to be executed when validation succeeds
  } else {
    // code to be executed when validation fails
  }
}
person Dónal    schedule 05.09.2011
comment
На самом деле существует ошибка, Grails разрешает электронную почту, содержащую только пустые символы (ограничение электронной почты). Вот как я обошел это, используя .trim() для исключения пробелов: validator: {email, CreditProviderCommand -> if (creditProviderCommand.notifyMe) { if (!email) return email != null else return email.trim() знак равно - person Alexandre Bourlier; 06.09.2011