2014-06-07 2 views
1

두 개의 서로 다른 객체에서 두 개의 언어 필드를 확인하려고합니다. 나는 Grails Validation을 발견하고 그래서 내가 만든 :Grails 클래스 간 유효성 확인

class Test { 
Title title 
Summary summary 

static contraints ={ 
     title validator: { val, obj -> 
     if (obj.title.getLanguage().equals(obj.summary.getLanguage())) println "same language" 
    } 
    } 
} 

도메인 요약

class Summary{ 
String language } 

및 도메인 제목

class Title{ 
String language} 

그러나 발리 반응 나던 나에게 보인다. 미리 감사드립니다.

+0

을 시도, 그래서 우리는 당신이 디버깅을 도와 드릴까요? – Raphael

+0

git에 예제를 업로드했습니다 : https://github.com/Spooney/GrailsTest.git 미리 감사드립니다 – Eddy2Go

답변

0

도메인의 나머지 부분을 보지 않고서는 구체적인 내용을 알 수는 없지만 중요한 사항은 누락되었습니다. 유효성을 검사중인 인스턴스에 대한 참조가 누락되었습니다. 사용자 정의 유효성 검사를 사용할 때 두 개의 선택적 매개 변수가 유효성 검사 클로저로 전달됩니다. 하나는 유효성이 검사되는 클래스의 인스턴스이고 다른 하나는 현재 등록 정보의 값입니다. 따라서, 이와 같은 도메인을 제공 :

class MyPerson { 
    String name 
    String nickName 

    static constraints = { 
    name(nullable: false, blank: false) 
    nickName(validator: {val, obj -> 
     if (obj.name == val) return false // ensure the name and nickname do not equal one another 
     return true 
    }) 
    } 
} 

그래서 위의 예에서 사용자 지정 유효성 검사의 이름과 별명이 서로 일치하지 않는 것을 보장한다. obj.name을 사용하여 인스턴스의 다른 특성을 참조하십시오. 이것은 당신이하려는 일의 핵심입니다. 이 도움이

static contraints ={ 
    title validator: { val, obj -> 
    if (obj.title.getLanguage().equals(obj.summary.getLanguage())) println "same language"   
    }  
} 

희망 : 귀하의 경우

유효성 검사는 다음과 같이 보일 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 도메인 클래스로 내 질문을 업데이트했습니다. – Eddy2Go

+0

매개 변수를 유효성 검사기에 전달하지 않습니다. 'validator : {val, obj ->'그렇지 않으면 obj는 의미가 없다. –

+0

새 버전을 사용해 보았습니다. 이제 내부 서버 오류가 발생합니다. – Eddy2Go

0

방금 ​​문제가있는 코드로 간단한 응용 프로그램을 구축하고 github에에 ​​게시 할 수 있습니다이 코드

static constraints = {  
    title blank: false, nullable: false,validator:{ value , object -> 
      //get title object from database,based on your logic/requirement 
       def title = Title 
      // get summary object from database,based on your logic/requirement 
       def summary = Summary   
       if (title.getLanguage().equals(summary.getLanguage())) 
        println "same language"   
        return true 
       } else { 
         //show message for validation failed. 
        return ['not.unique.validation','Langauge'] 
       } 
      } 
} 
+0

나는 너를 시도했지만 같은 결과를 얻었다. – Eddy2Go

+0

나는 내 대답을 업데이트하고 공백과 nullable을 추가하고 시도해보고 이것이 작동하는지 알려주세요. –

+0

새 버전 – Eddy2Go