9
respostas

Problemas com o redirect depois de adicionar um produto no banco

Pessoal, estava tentando fazer meu redirecionamento com o ModelAndView("redirect:produtos") e não deu certo assim como apareceu no vídeo. Segue o meu método gravar:

@RequestMapping(method = RequestMethod.POST)
    public ModelAndView gravar(Produto produto) {
        System.out.println(produto);
        produtoDao.gravar(produto);
        return new ModelAndView("redirect:produtos");
    }

Sempre que eu salvo os dados do formulário, ele salva os dados no banco, e no navegador é mostrada uma mensagem de erro 404 dizendo que não encontrou a JSP Produtos.

A minha lista de produtos está mapeada para casadocodigo/produtos e depois de salvar os dados no banco, o método gravar busca casadocodigo/produtos/produtos.

se eu trocar redirect:produtos por redirect:/produtos ele funciona, mas no vídeo o instrutor não faz assim. Alguém poderia me ajudar?

9 respostas

Olá Naldson,

Como está o seu método form do seu controller está?

Naldson, boa tarde !

Acredito que você tenha assinalado a sua classe Controller com @RequestMapping, correto? Você usou a declaração dessa forma:

@Controller
@RequestMapping("/produtos")

É possível que esteja faltando uma "/" no seu @RequestMapping.

Olá Denis, obrigado pela resposta!

Segue o meu método form

@RequestMapping("form")
    public ModelAndView form() {
        ModelAndView modelAndView = new ModelAndView("produtos/form");
        modelAndView.addObject("tiposPreco", TipoPreco.values());
        return modelAndView;
    }

Olá Sayd;

Sim, minha classe está assinalada com @RequestMapping(). Eu já tentei das duas formas, tanto com "/produtos" como só com "produtos", mas o resultado é o mesmo.

Naldson, boa noite! Coloca o fonte do seu Controller todo aqui, por favor.

Olá Sayd

package br.com.casadocodigo.loja.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import br.com.casadocodigo.loja.daos.ProdutoDao;
import br.com.casadocodigo.loja.models.Produto;
import br.com.casadocodigo.loja.models.TipoPreco;

@Controller
@RequestMapping("/produtos")
public class ProdutosController {

    @Autowired
    private ProdutoDao produtoDao;

    @RequestMapping("form")
    public ModelAndView form() {
        ModelAndView modelAndView = new ModelAndView("produtos/form");
        modelAndView.addObject("tiposPreco", TipoPreco.values());
        return modelAndView;
    }

    @RequestMapping(method = RequestMethod.POST)
    public ModelAndView gravar(Produto produto, RedirectAttributes redirectAttributes) {
        produtoDao.gravar(produto);
        redirectAttributes.addFlashAttribute("sucesso", "Produto adicionado com sucesso");
        return new ModelAndView("redirect:/produtos");
    }

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView listar() {
        ModelAndView modelAndView = new ModelAndView("produtos/lista");
        modelAndView.addObject("produtos", produtoDao.listar());
        return modelAndView;
    }

}

Naldson, bom dia ! Seu código está igual ao meu, não consigo entender o motivo de não funcionar.

Sabe a opção de fazer o clean no servidor, clique com o botão direito no servidor e depois clean.

Não sei se é uma tentativa válida, mais por via das dúvidas né.

Estou tendo o mesmo problema. você conseguiu resolver esse problema?

Não consegui não, Janderson... Confesso que deixei o curso de lado depois disso.