validation - 将 Grails 验证代码保存在域对象中

标签 validation grails groovy dns

我见过的很多 Grails Controller 示例都向您展示了如何将验证代码添加到在 View 中传递和从 View 传递的命令类,如下所示:

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
    }
}

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

static constraints = {
    importFrom User
}

所以在这里,我的验证规则是从我的 User 类中提取的。

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

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

最佳答案

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

关于validation - 将 Grails 验证代码保存在域对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14506447/

相关文章:

java - 检查枚举是否为 null 或为空

java - 常规闭包内部如何工作?

hibernate - 在 GORM 中查询计算字段

linux - 新安装的 Grails 2.0.3 Ubuntu 看起来不错,但运行 grails 会在几秒钟后返回

groovy - 在Gradle中设置和读取脚本范围的变量

json - 单个独立文字能否形成有效的 JSON "document"?

jQuery 验证错误(元素未定义)

sql-server - 如何在 T-SQL 中重写电话号码?

hibernate - grails 中的并发事务导致数据库过时状态异常

string - Groovy:没有现成的 stringToMap 吗?