2012-06-22 1 views
3

나는 Hibernate Validator를 사용하여 폼의 입력 필드를 검증하는 Spring MVC 프로젝트에서 일하고있다. 내 프로젝트는 Maven을 기반으로, 나는이 종속성 추가 :Spring MVC + Hibernate validator : 어떻게 디폴트 에러 메시지를 오버라이드/국제화 할 수 있습니까?

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator-annotation-processor</artifactId> 
     <version>4.1.0.Final</version> 
    </dependency> 

양식 유효성 검사 프로세스가 잘 작동을하지만 지금은 기본 오류 메시지를 무시하거나 국제화하고 싶습니다.

예를 들어 기본적으로 @NotEmpty 주석을 사용하면 "비어 있지 않을 수도 있습니다"라는 메시지가 나타납니다. 이 메시지를 내 메시지로 어떻게 대체 할 수 있습니까? 프로젝트 클래스 경로

그러나 기본에 ValidationMessages.properties 파일을 생성의 "basename이"속성

  • 를 ID가 "MessageSource를"가진 ​​Spring 빈을 정의하고 설정

    • : 나는 몇 가지 솔루션을 시도했습니다 메시지는 여전히 표시됩니다 ...

      힌트가 있습니까? Thx 사전에.

  • 답변

    5

    네, 그렇게 할 수 있습니다. 특성 파일에서 오류 메시지를로드 할 수 있습니다. 그러나 적절한 형식으로 키를 가져야합니다. NotEmpty.ClassName.fieldName=fieldName Can not be empty처럼.

    속성 파일에 정확한 클래스 이름과 속성 이름을 지정하기 만하면됩니다. 다른 모든 것은 귀하의 경우에 완벽하게 보이고 있습니다.

    해당 주석이있는 모든 필드에 대해 특정 유형의 유효성 검사 주석에 대해 일반적인 오류 메시지가 표시 될 수도 있습니다. Like javax.validation.constraints.NotNull=Notnull erro happened!

    희망이 도움이 될 것입니다. 건배.

    +3

    감사합니다. 당신의 답은 제가 만족스러운 해결책을 찾는 데 도움이되었습니다. "ValidationMessages.properties"라는 속성 파일을 클래스 경로에 추가해야했습니다. 그런 다음 각 유효성 검사 주석 (예 : org.hibernate.validator.constraints.NotEmpty.message = 내 메시지)을 가리키는 값을 추가하거나 대괄호 사이에 자체 키를 정의하고 속성 파일에서이 키를 사용할 수 있습니다. – kyiu

    +0

    완벽. 그것을 듣고있어 기쁘게 생각합니다. 천만에요. :-) –

    +1

    @KHY hiberate validators를위한 일반적인 메시지를 설정하는 것은 정확히 내가했던 것입니다. 또한 인라인 자바 코드로'@NotEmpty (message = "xyz {use.braces.for.bundle.keys}")'를 할 수 있고,'use.braces.for.bundle.keys = Hey guy 'ValidationMessages.properties' 파일의 줄에 중괄호! '를 사용하십시오. 필자의 의견으로는 @Pattern (regexp = "\\ d {4} - \\ d {2} - \\ d {2}", message = "{Invalid.Date.UseYMDFormat } ")' – Patrick

    1

    이것은 유효성 검사를 위해 주어진 모든 주석 뒤에 정확한 속성 이름을 찾는 방법에 대한 약간의 설명입니다. 아래에서 언급 한 단계를 참조하십시오.

    @Size(min = 1, max = 50, message = "Email size should be between 1 and 50") 
    

    이제 유효성 검사 태그에서 {message = "이메일 크기는 1 ~ 50"}을 (를) 제거하십시오.

    이렇게하면 특수 효과가 이렇게됩니다.

    @Size(min = 1, max = 50) 
    

    이제 컨트롤러 쪽에서 양식을 제출할 때 호출되는 방법을 디버깅하십시오. 아래는 사용자가 제출을 명중 할 때 요구를 받고있는 나의 방법이다.

    public static ModelAndView processCustomerLoginRequest(IUserService userService,LoginForm loginForm, 
        HttpServletRequest request, HttpSession session, BindingResult result, String viewType, Map<String, LoginForm> model) 
    

    이제 첫 번째 방법의 라인과 인수 "결과를"디버깅에 디버그 점을 배치합니다.

    BindingResult result 
    

    더빙 중에는 코드 배열에 다음과 같은 문자열이 있습니다.

    Size.loginForm.loginId 
    

    이제이 문자열을 등록 정보 파일에 정의하고 해당 문자열에 대한 메시지를 정의하십시오. 컴파일하고 실행하십시오. 그 주석은 유효성이 검증되지 않을 때마다 표시 될 것입니다.

    Size.loginForm.loginId=email shouldn't be empty. 
    

    기본적으로 스프링은 속성 파일 메시지의 키로 자체 문자열을 만듭니다. 위의 키에

    Size(@Size) = validation annotation name 
    loginForm = My Class Name 
    loginId = Property name in LoginForm class. 
    

    이 방법의 아름다움은 Spring Internationalization을 사용하는 동안 잘 실행됩니다. 언어 변경에 따라 자동으로 메시지 파일을 전환합니다.