2010-11-28 26 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