Grails:将自定义约束应用于Domain类的所有字段

时间:2014-07-02 12:46:12

标签: grails gorm grails-validation spring-validator

在Grails中,可以在Config.groovy文件中定义全局约束,该文件可用于使用

验证来自每个域类的所有已定义约束。
Config.groovy:
    grails.gorm.default.constraints = {
        '*'(nullable: true)
        ...
    }

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

class myDomainClass{
fields
...

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

}

}

2 个答案:

答案 0 :(得分:3)

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

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

static constraints = {
  // use MyCustomCOnstraint:true for fields firstname, lastname and address
  ['firstname', 'lastname', 'address'].each { property ->
    "$property"(MyCustomCOnstraint:true)
  }
}

答案 1 :(得分:0)

你可以看一些事情:

  1. 一个向后兼容的黑客 - 因为grails 2.3.4我认为:在你的config.groovy
  2. // Null object error fix for backward compatibility 
    grails.databinding.convertEmptyStringsToNull = false
    

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

    1. 您可以看一下Burt Beck的编程Grails第3章介绍自定义验证,从安装模板到进行极端自定义验证:
    2.   

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

      但说实话,我真的不认为除了讨论设置过滤器以将所有输入空白转换为空值之外,还有什么能够帮助的段:

      convertBlanksToNullsAndTrim

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

      如果是我,我会尝试第一个选项,看看它是否能治愈现状