У меня есть командный объект, который фиксирует форму обратной связи с 3 текстовыми областями.
class FeedbackCommand {
String textarea1
String textarea2
String textarea3
String username
static constraints = {
textarea1(nullable:true, blank:true)
textarea2(nullable:true, blank:true)
textarea3(nullable:true, blank:true)
username(nullable:false, blank:false)
}
}
Я бы хотел убедиться, что заполнена хотя бы ОДНА из текстовых областей.
Я придумал добавить поле поддельного флага в качестве поля «ограничения», а затем выполнил кучу проверок объектов в пользовательском валидаторе для этого поля. Если после осмотра в себе, и я не могу найти то, что я хочу, я выдаю ошибку.
Прямо сейчас я делаю это:
class FeedbackCommand {
String textarea1
String textarea2
String textarea3
boolean atLeastOne = true
String username
static constraints = {
textarea1(nullable:true, blank:true)
textarea2(nullable:true, blank:true)
textarea3(nullable:true, blank:true)
atLeastOne(validator: { boolean b, FeedbackCommand form, Errors err ->
if (b) {
if ( (form.textarea1==null || form.textarea1?.isAllWhitespace()) &&
(form.textarea2==null || form.textarea2?.isAllWhitespace()) &&
(form.textarea3==null || form.textarea3?.isAllWhitespace()))
{
// They havent provided ANY feedback. Throw an error
err.rejectValue("atLeastOne", "no.feedback")
return false
}
}
return true
})
username(nullable:false, blank:false)
}
}
Есть ли лучший способ
- проверить связанный / группу полей (хотя бы одно не может быть пустым, 2 должно иметь значения и т. Д.)?
- более удачный способ выражения "хотя бы один не должен быть пустым / пустым", а не мой грубый блок if-операторов?
Спасибо