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

Problema ao fazer submit do form de produto.

Boa, tarde!

Estou com problema ao fazer o submit do formulário de produto (Clico no botão cadastrar). Quando eu utilizo parâmetros do tipo String funcionam perfeitamente, mais quando utilizo um inteiro ou um Objeto (Produto) o método gravar() não é chamado. Nota: Eu testei a chamada utilizando o postman e funcionou perfeitamente, o que é mais estranho ainda. Segue meus códigos.

Formulário:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Livros de Java, Android, iPhone, Ruby, PHP e muito mais -
    Casa do Código</title>
</head>
<body>
    <form method="post" action="/casadocodigo/produtos">
        <div>
            <label>Título</label> <input type="text" name="titulo" />
        </div>
        <div>
            <label>Descrição</label>
            <textarea rows="10" cols="20" name="descricao"></textarea>
        </div>
        <div>
            <label>Páginas</label> <input type="text" name="paginas" />
        </div>
        <button type="submit">Cadastrar</button>
    </form>
</body>
</html>

Controller:

package br.com.casadocodigo.loja.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

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

@Controller
public class ProdutosController {

    @RequestMapping("/produtos/form")
    public String form(){
        return "produtos/form";
    }

    @RequestMapping("/produtos")
    public String gravar(Produto produto){
        System.out.println(produto);
        return "/produtos/ok";
    }

}
7 respostas

Wendel, tudo bem ?

Cara mostra seu modelo Produto, acredito que o Spring não esteja conseguindo fazer o bind, por isso não consegue bater no seu controller.

Abraços

Olá, Matheus

Eu estou bem. Obrigado pelo contato!

Segue minha entidade produto:

package br.com.casadocodigo.loja.models;

public class Produto {

    private String titulo;

    private String descricao;

    private int paginas;

    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;
    }

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

}

Wendel,

Acabei de pegar todos seus arquivos e fazer o teste aqui e deu tudo certo.

Me fala uma coisa, você tem a jsp ok.jsp, que é para onde você está redirecionando ?

Outra coisa que você pode fazer é dar um clean no seu projeto e mandar rodar novamente, acho bem válido isso ! Algumas vezes o eclipse não faz corretamente a alteração dos arquivos.

Testa e fala para gente se deu certo.

Abraços

Cara, o clean foi uma das primeiras coisas que tentei.

Como disse, é bem estranho, pois se eu mudar o parâmetro para String funciona. E mais estranho ainda que ao utilizar o postman para fazer o post ai o método funciona e o sprig faz o bind do produto.

Segue link com meu projeto, acredito que eu possa ter esquecido algum detalhe de configuração ou teve algum problema com a geração do projeto a partir do forge.

https://drive.google.com/file/d/0B8gyU8Ur0lsAZTJoYlF2NlRkclU/view?usp=sharing

Novamente, agradeço atenção!

solução!

Peguei seu projeto e ele está funcionando !

Cara, você tá passando valores ? Caso contrário o Spring não vai conseguir fazer o bind e isso gera um erro, por isso você está tomando um 404.

Passa valores válidos para cada campo e você verá tudo funcionar, abraços.

Matheus!

Muito obrigado pela observação e desculpe pela mancada. Ao fazer os testes eu passei valores aleatórios e estava preenchendo o campo inteiro com texto.

Vou tentar capturar a exceção e entender melhor como o spring trata esses casos

Valeu!

Sem problemas !!!

Dá uma olhadinha numa classe chamada BindErrors, ela te ajudará a fazer essa validação.

Bons estudos !!