2
respostas

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

Bom dia, estou tendo problemas para exibir a mensagem de erro logo pós a tentativa de envio do meu formulário vazio. Aguardo uma resposta. Obrigado.


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.dao.ProdutoDAO;

@EnableWebMvc
@ComponentScan(basePackageClasses = {HomeController.class,ProdutoDAO.class})
public class AppWebConfigurattion {


   @Bean
    public InternalResourceViewResolver internalResourceViewResolver() {

        InternalResourceViewResolver resolver = new InternalResourceViewResolver();

        resolver.setPrefix("/WEB-INF/views/");

        resolver.setSuffix(".jsp");

        return resolver;
    }

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

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

       return messageSource;
   }
}

field.riquired = Campo obrigatório field.riquired.produto.titulo = O campo Título é de preenchimento o obrigatório. field.riquired.produto.numeros = Informe o número de páginas. field.riquired.produto.titulo = O campo descrição é obrigatório. typeMismatch = O tipo de dado é inválido. typeMismatch.produto.numeros = Digite um valor válido. Exemplo "100"

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Livro Java, Android, Iphone, Ruby, Python e muito mais.
    Isso é casa do código!</title>
</head>
<body>
    <form action="/casadocodigo/produtos" method="POST">
        <div>
            <label>Titulo</label>
            <form:errors path="produto.titulo"/>
             <input type="text" name="titulo">
        </div>
        <div>
            <label>Descricao</label>
            <form:errors path="produto.descricao"/>
            <textarea rows="10" cols="20" name="descricao"> </textarea>
        </div>
        <div>
            <label>Paginas</label>
            <form:errors path="produto.paginas"/>
             <input type="text" name="paginas">
        </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>


</body>
</html>
2 respostas

Qual problema está tendo?

Não estava retornando a tela com as mensagem de erro especificar. Porém, apos algumas alterações as mensagens estão sendo exibidas. De qualquer modo, o campo de descrição ainda não está sendo validado.

package br.com.casadocodigo.loja.validation;

import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

import br.com.casadocodigo.loja.model.Produto;

public class ProdutoValidation implements Validator {

    public void valida(Produto produto, Errors errors) {

    }

    @Override
    public boolean supports(Class<?> clazz) {

        return Produto.class.isAssignableFrom(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        ValidationUtils.rejectIfEmpty(errors, "titulo", "field.required");
        ValidationUtils.rejectIfEmpty(errors, "descricao", "field.required");

        Produto produto = (Produto) target;
        if (produto.getPaginas() <= 0) {
            errors.rejectValue("paginas", "field.required");
        }
    }
}

Abaixo a Model.

package br.com.casadocodigo.loja.model;

import java.util.List;

import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Produto {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    private String titulo;
    private String descricao;
    private int paginas;

    @ElementCollection
    private List<Preco> precos;

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public int getPaginas() {
        return paginas;
    }

    public void setPaginas(int paginas) {
        this.paginas = paginas;
    }


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public List<Preco> getPrecos() {
        return precos;
    }

    public void setPrecos(List<Preco> precos) {
        this.precos = precos;
    }

    @Override
    public String toString() {
        return "Produto [titulo=" + titulo + ", descricao=" + descricao + ", paginas=" + paginas + "]";
    }


}

Abaixo o 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"%>

Titulo
Descricao
Paginas
    <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>
```

`