2009-06-24 7 views
4

은 내가 먼저 코드를 보여 주면 더 쉬울 수 있습니다, 객체의 목록의 내용을 확인하기 Grails의를 얻으려고 객체 필요한 연락 ('받는 사람')이 잘 작동합니다 :Grails의 검증

def i = new Item() 
// will be false 
assert !i.validate() 
// will contain a error for 'recipient.name' and 'recipient.email' 
i.errors 

난에 첨부 된 Contact 객체의 유효성을 검사 할 수도 싶습니다 무엇 extraRecipients '같은 것을 :

def i = new Item() 
i.recipient = new Contact(name:'a name',email:'[email protected]') 

// should be true as all the contact's are valid 
assert i.validate() 

i.extraRecipients << new Contact() // empty invalid object 

// should now fail validation 
assert !i.validate() 

이것이 가능합니까 아니면 내 컨트롤러의 컬렉션을 반복하고 extraRecipients의 각 개체에 validate()을 호출해야합니까?

답변

8

질문을 올바르게 이해하고 있으면 여분의 개별 연락처 항목에 계단식 저장 throw에 대한 유효성 검사 오류를 발생시키는 대신 항목 도메인 개체에 오류 (extraRecipients 속성에 대한 오류)를 표시하려고합니다. ?. 바로

는 그렇다면, 당신은 당신의 품목 제한에 이런 식으로 뭔가를 custom validator을 사용할 수 있습니다 (이 테스트되지 않았습니다하지만 가까워 야) :

static constraints = { 
    extraRecipients(validator: { recipients -> 
     recipients.every { it.validate() } 
    }) 
} 

당신은과보다 애호가 얻을 수 있습니다 결과 오류 문자열에서 수신자가 실패했음을 나타내는 오류 메시지 at는 그것을하는 기본적인 방법입니다.

+0

감사합니다. 나중에 오늘 밤에 bash를 사용합니다. –

+0

이것은 실제로 작동하며 실제로 사용할 솔루션입니다. 그러나 GrailsDomainClassValidator를 디버깅하는 데 약간의 시간을 소비했기 때문에 자동으로이 작업을 수행해야하며 내 경우에는 최대 절전 모드 프록시 클래스로 인해 작업을 수행하지 못합니다. –