Валидатор для нескольких типов в Grails - PullRequest
0 голосов
/ 28 ноября 2010

В доменном классе у меня есть значение из enum, которое представляет адрес электронной почты или URL-адрес

class Contact{
  ContactType contact
  String value
}

enum ContactType{
  EMAIL,
  URL
}

Я пытаюсь использовать встроенные в Grails классы EmailConstraint и UrlConstraint для проверки:

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

Мне удалось заставить его работать, сделав некоторые предположения при чтении источника Грааля:

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

Но я нахожу это очень уродливым, поэтому мне было интересно, сможет ли кто-нибудь предложить лучшее решение.1010 *

Спасибо.

1 Ответ

0 голосов
/ 28 ноября 2010

Вы можете реализовать пользовательское ограничение для этого случая, используя http://www.grails.org/plugin/constraints. Новый класс ограничений может делегироваться внутренне для EmailConstraint или своего рода «URLConstraint» в зависимости от значения перечисления.

Используя этот подход, ваш класс домена остается чистым, детали проверки разделяются на другой класс.

...