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

Dúvida no ex. 3 - Aula 7

Olá,

Estou com uma dúvida com relação as mensagens de erro. Realizei a configuração do messages.properties e importei a taglib form do Spring, porém as mensagens de erro não aparecem na tela. Revi o código, mas não encontrei o erro. Poderiam por favor me ajudar?

Obs: O message properties está dentro de WEB-INF

messages.properties:

field.required = Campo obrigatário
field.required.produto.titulo = O titulo é obrigatário
field.required.produto.paginas = O campo páginas é obrigatorio
field.required.produto.descricao = O campo descrição é obrigatório
typeMismatch = o tipo do dado é inválido

AppWebConf

@Bean
     public MessageSource messageSource() {
         ReloadableResourceBundleMessageSource messageSource =
                 new ReloadableResourceBundleMessageSource();

         messageSource.setBasename("/WEB-INF/messages");
         messageSource.setDefaultEncoding("UTF-8");
         messageSource.setCacheSeconds(1);

         return messageSource;
     }

ProdutoController

@RequestMapping("/gravar")
    public String gravar(@Valid Produto produto, BindingResult result, RedirectAttributes redirectAttributes){
        if(result.hasErrors()){
            return "redirect:form";
        }
        dao.gravar(produto);
        redirectAttributes.addFlashAttribute("sucesso", "Produto adicionado com sucesso!");
        return "redirect:listandoProdutos";
    }

Form

<form:form action="gravar" method="post" commandName="produto">
        <div>
            <label>Título: </label> <input type="text" name="titulo">
            <form:errors path="titulo" />
        </div>
        <br />
        <div>
            <label>Descrição: </label><br />
            <textarea rows="5" cols="50" name="descricao"></textarea>
            <form:errors path="descricao"/>
        </div>
        <br />
        <div>
            <label>Número de páginas: </label> <input type="text" name="paginas" />
            <form:errors path="paginas" />
        </div>

        <c:forEach items="${tipos}" var="tipoPreco" varStatus="status">
            <label>${tipoPreco}</label>
            <input type="text" name="precos[${status.index}].valor">
            <br />
            <input type="hidden" name="precos[${status.index}].tipo"
                value="${tipoPreco}">
        </c:forEach>



        <input type="submit" value="Cadastrar">

    </form:form>
6 respostas

tente rever a aula e fazer de novo acompanhando o vídeo.

Tive o mesmo problema, veja que está escrito messages em "messageSource.setBasename("/WEB-INF/messages");" no meu caso eu criei um arquivo message.properties e dava esse mesmo erro, verifique os nomes dos aqruivos. Pode ser que você tenha cometido o mesmo erro :)

solução!

Olá Rafael,

No meu caso eu mudei a chamada do redirect:form do método gravar para o método form() e aí ele funcionou.

Pra mim resolveu com a dica do Rafael Silva, só mudar o retorno para o método form().

A dica do Rafael Silv também funcionou para mim. Usando o redirect não estava dando certo.

Na aula 6, vídeo 6.1, perceba que no final do vídeo quando está sendo ajustado o método grava, não há redirect para quando um erro ocorre (result.hasErrors) e sim um return form(). Isto deve ser feito por conta da limpa que o redirect faz.