2016-06-22 3 views
0

У меня есть класс домена с некоторыми пользовательскими валидаторами, как следующее:Grails 2.4.2 - временная точка валидации объекта домена

class Domain { 
    String attribute1 
    OtherDomain attribute2 

    static constraints = { 
     attribute2 nullable: true, validator: {OtherDomain od, Domain d -> 
      if (od) { 
       log.debug "entering validation" 
       // certain validation here 
      } 
    } 
} 

Для обновления я получил простое действие в соответствующем DomainController:

@Transactional 
def update(Domain domainInstance) { 
    log.debug "entering update()" 
    // rest of update 
} 

Я задаюсь вопросом, почему в моем debuglog я получаю сообщения отладки в следующем порядке:

  1. entering validation
  2. entering update()

Проблема заключается в том, что проверка дала отрицательный результат в этой точке (StackOverflowError). Я знаю причину этой ошибки, и я знаю, что делать, чтобы обойти эту ошибку (делая это в действии update). Тем не менее, я не знаю, почему есть подтверждение, прежде чем программа даже попадет в действие update(). И я не знаю, как предотвратить проверку на этом этапе.

Есть ли у вас какие-либо предложения?

ответ

2

Причина, по которой вы видите сообщение «ввод проверки» перед «enter update()», состоит в том, что вы объявили объект команды типа Domain. Это означает, что Grails свяжет любые параметры запроса с domainInstance, а затем вызывает validate(), перед тем, как действие будет выполнено.. Это позволит вам написать такой код:

@Transactional 
def update(Domain domainInstance) { 
    // at this point request params have been bound and validate() has 
    // been executed, so any validation errors will be available in 
    // domainInstance.errors 

    if (domainInstance.hasErrors() { 
     // do something 
    } 

    log.debug "entering update()" 
} 
+0

Спасибо за ваш ответ и объяснение! Когда я перечитал документацию о привязке данных, я нашел ее также здесь: [Документация по Grails - Проверка ограничений: фазы проверки] (http://docs.grails.org/latest/guide/single.html#validatingConstraints) – gabriel