Задать вопрос
@artemfisher

Как привязать ошибки валидации к MessageSource?

Добрый день!
Работаю со Spring WebFlux (не в Boot).

Есть класс, для полей которого делаю валидацию
public class Catalog {
	
	private int id;
	
	@Length(min=3, message="catalog.name.short")
	@NotNull(message="catalog.name.null")
	private String name;
//...
}


В файле для MessageSource прописываю
catalog.name.short = Catalog name must be at least 3 characters long
catalog.name.null = Catalog name must be not null


в шаблоне Thymeleaf
<form method="post" th:action="@{/save_catalog}" enctype="multipart/form-data" th:object="${catalog}">
	
	<input type="hidden" th:field="*{id}">

	<label th:text="#{add_edit_catalog_name}"></label>
	<input type="text" th:field="*{name}"/>
	<p th:if="${#fields.hasErrors('name')}" th:errors="*{name}"> name error</p>
	
	<label th:text="#{add_edit_catalog_image}"></label>
	<input type="file" th:field="*{image}"/>	
	
	<input type="submit" th:value="#{add_edit_catalog_save}"/>	
</form>


В результате при ошибке валидации выводит:
catalog.name.short или catalog.name.null.

Как сделать чтобы подгружалось из MessageSource?
  • Вопрос задан
  • 24 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
azerphoenix
@azerphoenix Куратор тега Spring
Java Software Engineer
Здравствуйте.

Попробуйте добавить это:
@PropertySource(value = {
        "classpath:i18n/messages.properties"
}, encoding = "UTF-8")


И создайте конфигурацию

@Configuration
public class I18nAutoConfiguration {

    @Bean
    public ReloadableResourceBundleMessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setCacheSeconds(3600);
        messageSource.setBasenames(
                "classpath:i18n/messages");
        return messageSource;
    }

    @Bean
    public LocaleResolver localeResolver() {
        AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
        localeResolver.setDefaultLocale((Locale.forLanguageTag("en")));
        return localeResolver;
    }
}


Поменяйте конфиг под свои нужды. Это рабочий код.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы