Grails-命令对象,自定义条件验证器

Grails-命令对象,自定义条件验证器,grails,validation,constraints,customvalidator,command-objects,Grails,Validation,Constraints,Customvalidator,Command Objects,我想在我的命令对象中构建一个定制的验证器,以确保如果选中了notifyMe复选框,表单的电子邮件地址字段不会为空 以下是我最新的尝试: email(blank: true, nullable: true, email: true, validator: {email, creditProviderCommand -> if (creditProviderCommand.notifyMe == '

我想在我的命令对象中构建一个定制的验证器,以确保如果选中了
notifyMe复选框
,表单的
电子邮件地址
字段不会为空

以下是我最新的尝试:

email(blank: true, nullable: true, email: true,
                  validator: {email, creditProviderCommand ->
                              if (creditProviderCommand.notifyMe == 'on')
                                    return email.size() > 0})
我也尝试过使用
电子邮件!=空
电子邮件!=''
但它在这两种情况下都不起作用,这意味着即使选中了
notifyMe复选框
,并且
电子邮件地址
字段留空,也会接受表单提交

操作代码正确地处理验证错误(甚至是唯一约束)。 知道我做错了什么吗


非常感谢你的帮助

我觉得上面的代码很好。您是否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
  }
}

notifyMe
boolean
String
的类型是什么?实际分配给它的值是什么?我假设
boolean
boolean
,所以您只需要检查它的真实性,而不是
'on'
。实际上存在一个bug,Grails允许在仅包含空白字符时发送电子邮件(电子邮件约束)。这就是我解决这个问题的方法,使用.trim()排除空白:验证器:{email,creditProviderCommand->if(creditProviderCommand.notifyMe){if(!email)返回电子邮件!=null,否则返回电子邮件。trim()!=''}