0

我想在我的Command对象中创建一个自定义验证器,以确保如果选择了notifyMe checkbox,表单的字段email address将不会为空。Grails - 命令对象,自定义条件验证程序

这里是实现它我的最新尝试:

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

我与email != nullemail != ''也尝试过,但它不是在这两种情况下工作,这意味着表单提交被接受甚至与notifyMe checkbox检查, email address字段留空。

该操作的代码正确处理验证错误(甚至是唯一约束)。 任何想法我做错了什么?

非常感谢您的帮助。

+0

'notifyMe','boolean'或'String'类型是什么?实际分配给它什么价值?我想'boolean'或'Boolean',所以你只需要检查它的真相,而不是''on''。 –

回答

0

上面的代码对我来说看起来很好。当您选中复选框时,您是否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 
    } 
} 
+0

实际上有一个错误,Grails在只包含空白字符(电子邮件约束)时允许使用电子邮件。 这就是我如何工作解决此问题,使用.trim()排除空格: 验证: - (电子邮件)!{电子邮件,creditProviderCommand> 如果(creditProviderCommand.notifyMe){ 如果 回复邮件= NULL else return email.trim()!='' } } –