2010-11-19 7 views
4

매우 간단한 테스트 케이스를 작성했는데 Grails는 도메인 객체에서 validate를 호출 할 때 얕은 검증 만 수행한다는 것을 알게되었습니다. grails에서 깊은 검증을 할 수 있습니까? 아무도 나를 도울 수 있습니까? 내가 새로운 Address().validate()을 수행 할 때grails 도메인 객체에 대한 메소드의 유효성 확인

class Person { 
    Address address 
} 

class Address { 
String city 
} 

는 false를 반환하지만 난 new Person(address: new Address()).validate을 할 때 true를 반환합니다.

+0

질문 :

솔루션은, 마지막으로, 수동으로 자식 개체에 유효성 검사를 호출하는 것입니다. – robbbert

답변

7

현재 validate()save() 방법에 대해 설명되어 있지 않습니다 "깊은 검증", 그것은 will be in future (문서 전체 1.3.x의 트리 관련하면서 문서가 누락 된 것을 말한다) 동안. 다음 will state 이러한 방법 'deepValidate 매개 변수에 대한 문서 :

@ deepValidate @ (선택 사항) - 도메인 인스턴스의 연관성도 확인해야하는지 여부를 , 즉 여부를 검증 폭포 또는 를 결정합니다. 기본적으로 @ true @ - 계단식 유효성 검사를 비활성화하려면 을 @ false @로 설정하십시오.

테스트, 그러나, "깊은 유효성 검사"다음 각 호의 어느 하나에 해당하는 경우에 수행되지 것을 보여

  • 일대일 협회
  • 일대 협회
    • 일치하는 개체를 사용하여 할당 된 관련 개체
    • 일치 개체를 사용하여 할당 된모두 validate()save() 방법을 사용 11,946,247,643,210 방법, 예 person.addToAddresses(..)
    • 하고, 명시 deepValidate: true 파라미터

Similar findings have been published at another place으로 두 가지 방법을 사용하여 분류은 " 비 행동 "을"알려진 문제 "로 간주합니다. 내 자신의 포괄적 인 테스트 케이스는 downloaded from here 일 수 있습니다. 포기

class Person { 
    Address primaryAddress 
    static hasMany = [secondaryAddresses: Address] 

    static constraints = { 
     primaryAddress validator: { 
      it?.validate() 
     } 
     secondaryAddresses validator: { 
      it?.every { it?.validate() } 
     } 
    } 
} 
관련 문제