1

在 Grails 中,可以在 Config.groovy 文件中定义全局约束,该文件可用于验证来自每个域类的所有已定义约束,使用

Config.groovy:
    grails.gorm.default.constraints = {
        '*'(nullable: true)
        ...
    }

问题: 是否也可以定义一个仅用于一个域类的字段的约束?我正在考虑这样的事情(这在现实中行不通)

class myDomainClass{
fields
...

static constraints = {
'*'(MyCustomCOnstraint:true)

}

}
4

2 回答 2

3

我不知道是否有一个标准的解决方案。

如果没有,您可以在约束闭包内构建一个循环:

static constraints = {
  // use MyCustomCOnstraint:true for fields firstname, lastname and address
  ['firstname', 'lastname', 'address'].each { property ->
    "$property"(MyCustomCOnstraint:true)
  }
}
于 2014-07-02T13:12:11.693 回答
0

你可以看看一些事情:

  1. 向后兼容性的一个技巧-我认为从 grails 2.3.4 开始:在您的 config.groovy
// Null object error fix for backward compatibility 
grails.databinding.convertEmptyStringsToNull = false

这会停止将空白转换为空值 - 并且可能会解决您的问题,添加此功能是有原因的 - 为了您自己的应用程序安全......所以明智地选择。

  1. 你可以看看 Burt Beckwith 的 Programming Grails 第 3 章涵盖了自定义验证,从安装模板到进行极端自定义验证:

导入 com.myapp.MyUserValidator beans = { 'com.myapp.UserValidator'(MyUserValidator) }

但老实说,除了讨论设置过滤器以将所有输入空白转换为空值的部分之外,我真的不认为该部分可以提供任何帮助:

convertBlanksToNullsAndTrim

您可以反转该代码,以便如果它为空,则使其=''。再次使用上述点,如果默认情况下它可以设置为空,除非在您的 config.groovy 中设置点 1

如果是我,我会尝试第一个选项,看看它是否能治愈当前的情况

于 2014-07-02T14:16:24.677 回答