2010-11-28 47 views
0

在我从它表示一个电子邮件地址或URL验证多种类型的Grails中

class Contact{ 
    ContactType contact 
    String value 
} 

enum ContactType{ 
    EMAIL, 
    URL 
} 

我试图使用内置的Grails的EmailConstraint和UrlConstraint类枚举值的域类验证:

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

我设法让它通过使一些假设阅读Grails的源工作:

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

但我觉得这很丑陋,所以我想知道是否有人可以提供更好的解决方案。

谢谢。

回答

0

您可以使用http://www.grails.org/plugin/constraints为此案例实施自定义约束。新的约束类可能会内部委托给EmailConstraint或根据枚举值取决于某种“URLConstraint”。

使用这种方法,您的领域类保持清洁一个小,验证细节分为不同的类。

+0

好主意,谢谢,但仍然,约束代码一直困扰着我。 – Eldelshell 2010-11-29 22:52:22