2012-03-03 61 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