在域对象中保留Grails验证代码

时间:2013-01-24 16:46:46

标签: validation grails groovy dns

我见过的很多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
        }
    }
}

1 个答案:

答案 0 :(得分:2)

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