2016-10-30 4 views
1

봄 부팅시 오류 메시지를 지역화하는 방법을 파악하려고합니다. 하나가 응답 필터의 필드를 처리 한 후SpringBoot BindingResult의 오류 메시지 지역화

@RequestMapping 
public ModelAndView index(@Valid SomeDto dto, BindingResult result) { 
    //... 
    result.addError(new FieldError("field1","messages.field1.error1")); 
    //... 
} 

//... 

public class SomeDto { 

    @Size(min = 3, message = "messages.field.error2") 
    private String field1; 
} 

그리고, 또는 어떻게 든 thymeleaf 템플릿의 메시지를 구문 분석 : 이상적인 방법은 다음과 같이 오류의 지역화 된 메시지의 이름을 설정하는 것입니다.

+0

@Alex이 글에서는 도움이되는 내용이 없습니다. 현지화 설정은 문제가되지 않습니다. – Benedictus

+0

당신 말이 맞습니다. 나는 당신의 질문에 대해 오해했습니다! – alexbt

+0

그건 이미 상자에서 작동합니다. 'FieldError'는 구성된 'MessageSource'에 전달 될 DefaultMessageSourceResolvable입니다. 당신이해야 할 유일한 것은'messages_field1.error1' 에러 코드가'messages_ [locale] .properties'에서 사용 가능한지 확인하는 것입니다. 그래도 바로 작동하지 않는다면 설정에 결함이있는 것입니다. –

답변

0

좋아, 나는 thymeleaf에있는 방법을 알아 낸 :

<div th:if="${#fields.hasErrors('field1')}" 
    th:each="e : ${#fields.errors('field1')}" th:text="#{${e}}" > 
</div> 

을 그것을 할 수있는 가장 우아한 방법은 아마 아니다 그러나.

0

"그러나 아마도 가장 우아한 방법은 아닙니다."

사실, 당신은 "우아한 방식"에 매우 가깝습니다. 대신 : th:text="#{${e}}"th:text="${e}"을 사용하십시오. 하지만 물론 현지화 된 메시지는 표시되지 않습니다.

Size.someDto.field1=Field has to contain at least {2} characters. 

따라서, 패턴은 기본적으로 : 지역화 된 메시지를 표시하려면 파일 당신은 당신의 messages_en.properties이 추가됩니다 (또는 로케일이 무엇이든) 모델의 이름 다음에 검증 주석의 이름은 이름 뒤에 인스턴스를 속성 필드의. {2}min 주석 속성 값의 약자이며 {1}max을 나타냅니다. 또한 "out of box"라는 현지화 된 메시지를 표시합니다.

P. 이 줄이 필요하지 않습니다.

result.addError(new FieldError("field1","messages.field1.error1")); 
+0

일부 오류를 수동으로 처리하고 로케일 메시지를 같은 방식으로 표시해야한다는 것을 보여주기 위해'result.addError (new FieldError ("field1", "messages.field1.error1")); '를 추가했습니다. 이 패턴을 사용하여 컨트롤러 유효성 검사의 오류를 표시하려면 어떻게합니까? – Benedictus