2012-03-03 2 views
1

Je suis un débutant Grails. J'ai une classe Domain qui possède un champ domainName dans Grails (ver 2.0.1). Dans mon DomainConstraints.groovy, j'ai:Grails: modifier dynamiquement les contraintes de domaine dans le contrôleur

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

mais selon une situation, je veux faire de ce champ domainName "vide: true" ou "blanc: false". Je ne valide pas ma classe de domaine par rapport à la base de données réelle, donc la synchronisation avec la classe de domaine et la table réelle n'est pas un problème.

Alors, je veux faire quelque chose comme ça (le code ci-dessous est de mon imagination):

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

Est-ce possible?

+1

voir http://stackoverflow.com/questions/4725059/grails-custom-validator-for-domain-class – paislee

Répondre

2

Vous pouvez faire quelque chose comme ceci:

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

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

    } 
} 

Ensuite, positionner le validateBlankFlag sur l'objet de domaine selon que vous souhaitez autoriser des valeurs vides ou non. Vous n'avez peut-être même pas besoin de la propriété validateBlankFlag si vous pouvez prendre la décision en fonction d'autres valeurs de propriété dans l'objet DomainConstraints.

+0

@cweston le code ci-dessus montre 'validateBlankFlag' dans le tableau des transitoires. – proflux

Questions connexes