2012-07-14 4 views
2

나는 grails 응용 프로그램에서 작업하고 있는데, 응용 프로그램에 50 개 이상의 도메인이 많이 있습니다! 그렇게 할 때, 등등Grails 도메인 사용자 정의 오류 메시지

class Person { 

    String firstName; 
    String lastName; 
    String middleName; 
    Date dob; 
    String gender; 
    String religion; 
    String nationality; 
    String maritalStatus; 

    Zone permAddZone; 
    District permAddDistrict; 
    String permAddVDC; 
} 

과 : 발생 된 오류 메시지가 나는

default.blank.message=Field "{0}" cannot be blank. 

도메인 클래스 중 하나는 다음과 같다 제의 예 파일 내 message.properties에 다음 한 기본입니다 예를 들어 'maritalStatus'와 같은 필드를 남겨두면 다음 오류 메시지가 표시됩니다. 'Field "maritialStatus"비워 둘 수 없습니다. " 나는 또한

person.maritialStatus=Maritial Status 

을 제기하지만 여전히 나는 점점 오전 내 message.properties에 다음과 같은 추가 '필드'maritialStatus 것은 "비워 둘 수 없습니다. ' 메시지. 나는 또한 I18n Templates Plugin을 사용해 보았지만, 많은 도메인 클래스를 가지고 있기 때문에, 그것들 모두에 대한 에러 메시지를 수정하는 것은 많은 시간이 걸릴 것이다. 그래서, 내가 가진 선택은 무엇이며, 무엇이 잘못 되었는가? 어떤 도움을 주셔서 감사합니다.

답변

1

당신이 키 오버라이드 (override) 할 필요가 필드 레이블 무시하기 위해서는 : 귀하의 경우 그래서

<package>.<domainclass>.<fieldname>.label 

을 시도 :

<package>.Person.martialStatus.label=Label 
+0

감사!완벽하게 작동했습니다! –

3

재정의 할 적절한 메시지 키는 각 제약 조건 유형에 대한 참조 페이지에 지정됩니다. blank의 경우는

com.example.Person.maritalStatus.blank=Marital status must not be blank 

그러나 이것은 당신이 많은 도메인과 많은 특성이있는 경우 매우 많은 시간이 소요 및 반복 될 것입니다.

도메인 클래스 속성 이름을 기본값 인 메시지에 삽입하기 전에 도메인 클래스 속성 이름을 처리하는 방법이 필요합니다. 이것은 Grails가 기본적으로 지원하는 것이 아닙니다. 그러나 나는 도전을 좋아합니다 ... 그리고 그것을 구현하는 놀랍도록 우아한 방법을 찾았습니다. 내 방법은 Grails의이 https://github.com/ianroberts/recursive-messages에서 사용할 수 플러그인이며

default.blank.message=Field "{0,message,field.name.}" cannot be blank. 

자리 표시 자 {N,message,prefix}은 보통 자리 교체 치에 지정된 접두사를 붙이는 후 처리하여 해결 형식의 자리를 지원하는 형식 문자열 구문을 확장하여 작동 결과 문자열 (이 예제에서는 field.name.maritalStatus)을 인수가없는 메시지 키로 사용하고이를 일반적인 방법으로 살펴 봅니다. 따라서 서로 다른 언어에 대해 다른 표현을 할 수 있습니다.

는 그것은 플러그인의 doWithSpring에서 작동하지만 기본 messageSource Spring 빈의 정의를 수정하는 응용 프로그램의 resources.groovy에서 작동하지 않는 트릭에 의존하기 때문에 플러그인이어야한다.

면책 조항 : 이것은 신속하게 수정되었으므로 완전히 테스트되지 않았으므로보다 효율적으로 구현할 수 있습니다.

+0

본인은 모든 모든 필드에이 일을 도메인은 매우 오랜 시간이 걸릴 수 있습니다. 난 단지 기본 오류 메시지에서 필드 이름의 이름을 바꾸려고했습니다. –

+0

바로 지금 당신이 얻고있는 것을 봅니다. 기본적으로 지원되지는 않지만 플러그인으로 구현하는 방법을 발견했습니다. 편집 된 답변 참조. –

+0

답장을 보내 주셔서 감사합니다. 시도했지만 작동하지 않았습니다. 내가 잘못했을 수도 있습니다. –

관련 문제