Grails:动态更改控制器中域的约束

时间:2012-03-03 01:03:03

标签: grails

我是Grails的初学者。我有一个Domain类,它在Grails(版本2.0.1)中有domainName字段。在我的DomainConstraints.groovy中,我有:

constraints = {
    domainName blank: false, matches: "^([^.]{0,63}\\.)*([^.]{1,63})\$"
}

但是根据某些情况,我想将此domainName字段设置为“blank:true”或“blank:false”。我没有根据实际数据库验证我的域类,因此与域类和实际表同步不是问题。

所以,我想做这样的事情(下面的代码来自我的想象):

if(something){
   Domain.constraints.removeAttr('blank')
} else {
   Domain.constraints.addAttr('blank', 'true')
}

这可能吗?

1 个答案:

答案 0 :(得分:2)

你可以这样做:

class DomainConstraints {
  Boolean validateBlankFlag
  String domainName
  static transients = [validateBlankFlag]

  static constraints = {
    domainName validator :  { val,obj -> !val?.equals("") || !obj.validateBlankFlag}

  }
}

然后根据您是否要允许空值来设置域对象上的validateBlankFlag。如果您可以根据DomainConstraints对象中的其他属性值做出决定,则可能甚至不需要validateBlankFlag属性。

相关问题