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

Acho que meu messages.properties nao está sendo usado

Eu havia configurado o form.jsp como foi mostrado na aula, assim como o AppWebConfiguration e o messages.properties, e ele não estava exibindo as mensagens de erro .. aí eu mudei o public MessageSource messageSource() e o form.jsp pra ver se ele estava realmente usando esses caras, coloquei um sysout no messageSource() e ele realmente usa esse metodo na hora de subir o server, mas não está validando nada... em seguida eu quebrei meu jsp propositalmente pra ver se meu "form:erros " está sendo usado, e pra minha surpresa, ele não deu nenhum erro ao tentar rodar com meu .jsp "quebrado", ou seja, acho que ele nem está usando essa tag, depois ele tambem não deu nenhum erro quando eu "quebrei" o messageSource()

meu form.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cadastrar Produto</title>
</head>
<body>

<form:form action="${s:mvcUrl('PC#grava').build()}" method="POST" commandName="produto">

    <div>
        <label>Título</label>
        <input type="text" name="titulo" />
        <form:errors> path = "asdas"</form:errors> //  atributo que nao existe
    </div>

    <div>
        <label>Descrição</label>
        <textarea rows="10" cols="20" name="descricao"></textarea>
        <form:errors> path = "descricao"</form:errors>

    </div>


    <div>
        <label>Páginas</label>
        <input type="text" name="paginas" />
        <form:errors> path = "paginas"</form:errors>
      </div>


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

    <button type="submit">Cadastrar</button>
</form:form>
</body>
</html>

AppWebConfiguration:

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.view.InternalResourceViewResolver;

import br.com.casadocodigo.loja.controller.HomeController;
import br.com.casadocodigo.loja.daos.ProdutoDAO;

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

    @Bean
    public MessageSource messageSource() {
        System.out.println("olaa");        
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("/WEB-INF/asds.properties"); // arquivo que não existe
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setCacheSeconds(1);
        return messageSource;
    }
}
2 respostas
solução!

Consegui resolver o problema, acabei descobrindo sem querer, ao fazer os exercicios do capitulo seguinte. Eu havia colocado o form:erros desse jeito:

        <form:errors> path = "paginas"</form:errors>

sendo que o correto é assim

        <form:errors path="paginas"/>

por isso ele nao estava identificando minha tag, e nem chamava a classe de validação.

Em seguida apareceu outra Exception, com a seguinte mensagem:

 No message found under code 'field.required' for locale 'pt_BR' 

bom, isso já era um bom sinal, sinal de que o spring estava tentando validar o Produto... Pra resolver esse erro eu precisei criar 3 arquivos:

messages.properties
messages_pt_BR.properties
messages_en_US.properties

aí ele passou a funcionar normalmente, fazendo as validações.

Perfeito Vinicius,

Solução bem detalhada, obrigado por compartilhar

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software