2012-03-03 62 views
1

我是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') 
} 

这可能吗?

+1

请参阅http://stackoverflow.com/questions/4725059/grails-custom-validator-for-domain-class – paislee 2012-03-03 01:06:37

回答

2

你可以做这样的事情:

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