2010-11-28 14 views
0

In einer Domänenklasse I einen Wert aus einem Enum haben, die eine E-Mail-Adresse oder eine URL zuValidator für mehrere Arten in Grails

class Contact{ 
    ContactType contact 
    String value 
} 

enum ContactType{ 
    EMAIL, 
    URL 
} 

Ich versuche, die eingebaute grails EmailConstraint und UrlConstraint Klassen zu verwenden repräsentiert Validierung:

Constraint constraint = new EmailConstraint() 
constraint.setPropertyName "value" 
constraint.setOwningClass obj.class 
constraint.setParameter true 
constraint.validate(obj, obj.value, errors) 
:

static constraints = { 
    value(validator: { 
    ContactType.validate(obj, val, errors) 
    }) 
} 

ich es, indem einige Annahmen Lesen grails Quelle arbeiten machen verwaltet 210

Aber ich finde das sehr hässlich, also habe ich mich gefragt, ob jemand eine bessere Lösung anbieten kann.

Danke.

Antwort

0

Sie könnten eine benutzerdefinierte Einschränkung für diesen Fall mit http://www.grails.org/plugin/constraints implementieren. Die neue Einschränkungsklasse könnte intern an EmailConstraint oder an eine Art "URLConstraint" abhängig vom Aufzählungswert delegieren.

Mit diesem Ansatz bleibt Ihre Domänenklasse sauber und die Validierungsdetails sind in eine andere Klasse unterteilt.

+0

Gute Idee, danke, aber immer noch stört mich der Constraint-Code. – Eldelshell

+0

Sie könnten den obigen Code "groovyfy" zu: new EmailConstraint (propertyName: 'value', owningClass: obj.class, parameter: true) .validate (obj, obj.value, errors) –

Verwandte Themen