2

我见过的许多 Grails 控制器示例向您展示了如何将验证代码添加到传递到视图和从视图传递的命令类,如下所示:

class RegisterCommand {
    String username
    String email

    static constraints = {
         username blank: false, nullable: false, validator: { value ->
             !User.findByUsername(value) }

         email blank: false, nullable: false, email: true
    }
}

这很好,但如果我们需要在另一个控制器中验证用户,可能会导致代码重复。因此,Grails 为您提供了从域类中导入验证规则的选项,如下所示 -

static constraints = {
    importFrom User
}

所以在这里,我的验证规则是从我的User班级中提取出来的。

这确实有助于 DYR 原则,但是如果我想有条件地从域类中导入验证规则怎么办?因此,例如,如果有人选中了表格上的一个框,说他们想通过邮寄方式接收小册子,我只想验证表格上的地址字段。我已经尝试了这个主题的几个变体,但我似乎无法让它工作......这可能吗?

static constraints = {
    importFrom User
    addressCheckbox validator: { value, command -> 
        if (value) {
            importFrom Address
        }
    }
}
4

1 回答 1

2

我认为它不起作用,因为importFrom在编译时适用于约束构建器层,但您的验证器闭包importFrom在运行时的验证阶段调用。

于 2013-01-24T17:09:16.807 回答