Grails:将自定义约束应用于域类的所有字段
Posted
技术标签:
【中文标题】Grails:将自定义约束应用于域类的所有字段【英文标题】:Grails: Apply a custom constraint to all fields of an Domain class 【发布时间】:2014-08-23 06:20:08 【问题描述】:在 Grails 中,可以在 Config.groovy 文件中定义全局约束,该文件可用于验证来自每个域类的所有已定义约束
Config.groovy:
grails.gorm.default.constraints =
'*'(nullable: true)
...
问题: 是否也可以定义一个仅用于一个域类的字段的约束?我正在考虑这样的事情(实际上行不通)
class myDomainClass
fields
...
static constraints =
'*'(MyCustomCOnstraint:true)
【问题讨论】:
【参考方案1】:我不知道是否有标准解决方案。
如果没有,你可以在约束闭包内建立一个循环:
static constraints =
// use MyCustomCOnstraint:true for fields firstname, lastname and address
['firstname', 'lastname', 'address'].each property ->
"$property"(MyCustomCOnstraint:true)
【讨论】:
【参考方案2】:你可以看看一些东西:
-
一种向后兼容的技巧 - 我认为从 grails 2.3.4 开始:在您的 config.groovy 中
// Null object error fix for backward compatibility grails.databinding.convertEmptyStringsToNull = false
这会停止将空白转换为空值 - 并且可能会解决您的问题,添加此功能是有原因的 - 为了您自己的应用安全...所以请明智地选择。
-
您可以查看 Burt Beckwith 的 Grails 编程第 3 章介绍了自定义验证,从安装模板到进行极端自定义验证:
导入 com.myapp.MyUserValidator beans = 'com.myapp.UserValidator'(MyUserValidator)
但老实说,除了讨论设置过滤器以将所有输入空白转换为空值的部分之外,我真的认为该部分没有任何帮助:
convertBlanksToNullsAndTrim
您可以反转该代码,以便如果它为空,则使其=''。再次使用上述点,如果默认情况下它可以设置为空,除非在您的 config.groovy 中设置点 1
如果是我,我会尝试第一个选项,看看它是否能治愈当前的情况
【讨论】:
以上是关于Grails:将自定义约束应用于域类的所有字段的主要内容,如果未能解决你的问题,请参考以下文章
更新 Grails 中父域类中的“lastUpdated”字段