Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

O Spring não localiza a mensagem de erro dentro do arquivo messages.properties

A mensagem de erro é esta abaixo:

org.springframework.context.NoSuchMessageException: No message found under code 'field.required.produto.titulo' for locale 'en_US'.

E no meu arquivo messages tem os seguintes itens:

field.required = Campo obrigatório field.required.produto.titulo = O campo título é obrigatório field.required.produto.paginas = O campo páginas é obrigatorio field.required.produto.descricao = O campo descriçõo é obrigatorio

Já tentei fazer algumas coisas como criar um sub diretório dentro de WEB-INF e depois jogar o arquivo dentro. Não funcionou.

Tentei também criar um arquivo messages_en_US.properties. Não funcionou.

Realizei um update project no Maven. Não funcionou.

Não sei mais o que posso fazer. Alguém pode me dar uma luz ai?

Abs.

4 respostas

Você definiu o bean do MessageSource na sua classe de configuração?

Olá Daniel! Defini o Bean como está abaixo:

package br.com.casadocodigo.loja.conf;


import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

import br.com.casadocodigo.loja.controllers.HomeController;
import br.com.casadocodigo.loja.dao.ProdutoDAO;

@EnableWebMvc
@ComponentScan(basePackageClasses={HomeController.class, ProdutoDAO.class})
public class AppWebConfiguration extends WebMvcConfigurerAdapter {
    @Bean
    public InternalResourceViewResolver internalResourceViewResolver(){
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

    @Bean
    public MessageSource errorMessage(){
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("/WEB-INF/message");
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setCacheSeconds(1);
        return messageSource;
    }

}
solução!

o nome do metodo que retorna o MessageSource deve se chamar messageSource() ou a anotação @Bean deve estar como @Bean(name="messageSource"), na documentação não encontrei o porque esse bean deve ter o mesmo nome do retorno, mas se nao tiver o mesmo nome ou a anotaçao nao definir o nome do Bean o Spring nao consegue encotrar o messageSource, outro bean que também deve ter o mesmo nome do retorno que voce vera futuramente no seu estudo é o bean LocaleResolver.

Boa tarde Daniel! Muito obrigado pela resposta. Defini o id do Bean para "messageSource" como você sugeriu e agora funciona.