Grails:在控制器中动态更改域的约束条件
问题描述:
我是Grails初学者。我有一个Domain类,在Grails中有domainName字段(版本2.0.1)。在我DomainConstraints.groovy,我有:Grails:在控制器中动态更改域的约束条件
constraints = {
domainName blank: false, matches: "^([^.]{0,63}\\.)*([^.]{1,63})\$"
}
但是,在某些情况下,我想使这个领域则domainName“空白:真”或“空白:假”。我没有根据实际数据库验证我的域类,因此与域类同步并且实际的表不是问题。
所以,我想这样做(下面的代码是从我的想象):
if(something){
Domain.constraints.removeAttr('blank')
} else {
Domain.constraints.addAttr('blank', 'true')
}
这可能吗?
答
你可以做这样的事情:
class DomainConstraints {
Boolean validateBlankFlag
String domainName
static transients = [validateBlankFlag]
static constraints = {
domainName validator : { val,obj -> !val?.equals("") || !obj.validateBlankFlag}
}
}
然后,只需设置域对象的validateBlankFlag
取决于你是否允许空值与否。如果您可以根据DomainConstraints对象内的其他属性值作出决定,则可能甚至不需要validateBlankFlag
属性。
+0
@cweston上面的代码显示了瞬态数组中的validateBlankFlag。 – proflux 2014-11-28 20:30:28
请参阅http://stackoverflow.com/questions/4725059/grails-custom-validator-for-domain-class – paislee 2012-03-03 01:06:37