조건부 null이 아닌 제약 조건을 적용하기 위해 필드에 사용자 정의 유효성 검사기를 추가하려고합니다. 이 요구 사항은 여러 객체에서 공유되므로 기존의 전역 (객체 또는 필드가 아닌) 메시지 키를 다시 사용하고자합니다. 아래의 예에서는 objectA.fieldC.null.message
이 아닌 default.null.message
을 사용하려고합니다.왜 사용자 정의 필드 검사기에서 전역 메시지 키를 반환 할 수 없습니까?
documentation for the Grails validator은 message.properties에서 키를 나타내는 문자열 값을 반환하여 오류 사례를 알릴 수 있다고합니다.
이 폐쇄가 반환 할 수 있습니다 : 문서는 (강조 광산)을 나타냅니다
- 값이 유효 함을 표시하는 경우는 null 또는 사실 (또는 반환 값) 유효하지 않은 값을 표시하기 위해 거짓
- "classname.propertyName"에 추가 할 오류 코드를 나타내는 문자열을 사용하십시오. 오류 메시지를 해결하는 데 사용 된 문자열 필드 특정 메시지를 확인할 수없는 경우 오류 코드 자체가 해결되어 전역 오류 메시지가 허용됩니다.
- 위와 같이 문자열을 포함하는 목록과 그 뒤에 오는 인수가 grails-app/i18n/message.properties 파일의 형식화 된 메시지 인수로 사용됩니다. 인수의 맵핑은 다음과 같습니다. 0 - 2 매개 변수는 자동으로 0 : 특성 이름, 1 : 클래스 이름, 2 : 특성 값에 맵핑됩니다. 추가 매개 변수 내가 또한 Grails bug 내가 할 노력하고 있어요 정확히 무엇을 꽤 많이 요청하는 것 1.0 다시 폐쇄 발견했습니다 매개 변수 3.
에서 시작 매핑됩니다.
다음은 내가하는 일의 예입니다. 보시다시피, 나는 한 가지 접근 방법을 가지고 있지만, 처음에는 겉으로보기에는 깨끗한 두 가지 옵션이 작동하지 않는다는 사실을 정말로 저에게 알립니다.
class ObjectA {
ObjectB fieldB
ObjectC fieldC
static constraints = {
fieldC(nullable: true, validator: { value, object, errors ->
if (object.fieldB != ObjectB.SOMETHING && !value) {
// Doesn't work
//return "default.null.message"
// Doesn't work
//return ["default.null.message"]
// This works
errors.rejectValue("defaultBrand", "default.null.message", ["defaultBrand"] as Object[], "The field \"{0}\" cannot be null")
}
})
}
}
여기 내 message.properties
의 항목입니다 : 나는 사용자 지정 오류 메시지와 Grails의 사용자 정의 필드 유효성 검사기와 관련된 여기에 couplequestions을 본 적이
default.null.message=The field "{0}" cannot be null
,하지만 아무것도 내 특정 상황을 해결하기 위해 보인다.
대답 http : // stackoverflow.com/a/19299423/2051952 – dmahapatro
두 질문 모두 본질적으로 동일한 대답을 가지고 있지만, 중복으로 표시해야한다고 생각하지 않습니다. 참조한 질문에서 명령 개체를 구체적으로 호출하기 때문에 도메인 유효성 검사 질문에 대한 대답을 찾을 때 대부분의 사람들이 목록에서 선택하지 않을 것이라고 생각합니다. – jstricker
도메인 클래스 및 명령 개체에 대한 제약 조건은 동일합니다. – dmahapatro