8
respostas

404 ao clicar em comprar - aula 11

Toda vez que clico em comprar recebo uma página 404 com a seguinte url:

http://localhost:8080/casadocodigo/carrinho/produtos

Esse é um trecho do meu detalhe.jsp

<body class="produto">

  <header id="layout-header">
        <div class="clearfix container">
            <a href="/" id="logo">
            </a>
            <div id="header-content">
                <nav id="main-nav">

                    <ul class="clearfix">
                        <li><a href="/carrinho" rel="nofollow">Carrinho (${carrinhoCompras.quantidade})</a></li>

                        <li><a href="/pages/sobre-a-casa-do-codigo" rel="nofollow">Sobre Nós</a></li>

                        <li><a href="/pages/perguntas-frequentes" rel="nofollow">Perguntas Frequentes</a></li>
                    </ul>
                </nav>
            </div>
        </div>
    </header>
    <nav class="categories-nav">
        <ul class="container">
            <li class="category"><a href="http://www.casadocodigo.com.br">Home</a></li>
            <li class="category"><a href="/collections/livros-de-agile">
                    Agile </a></li>
            <li class="category"><a href="/collections/livros-de-front-end">
                    Front End </a></li>
            <li class="category"><a href="/collections/livros-de-games">
                    Games </a></li>
            <li class="category"><a href="/collections/livros-de-java">
                    Java </a></li>
            <li class="category"><a href="/collections/livros-de-mobile">
                    Mobile </a></li>
            <li class="category"><a
                href="/collections/livros-desenvolvimento-web"> Web </a></li>
            <li class="category"><a href="/collections/outros"> Outros </a></li>
        </ul>
    </nav>

    <article id="${produto.id}">
          <header id="product-highlight" class="clearfix">
            <div id="product-overview" class="container">
              <img width="280px" height="395px" src="http://cdn.shopify.com/s/files/1/0155/7645/products/css-eficiente-featured_large.png?v=1435245145" class="product-featured-image" />
              <h1 class="product-title">${produto.titulo}</h1>
              <p class="product-author">
                <span class="product-author-link">

                </span>
              </p>    

            <p class="book-description">
                ${produto.descricao}
            </p>
            </div>
          </header>


      <section class="buy-options clearfix">  
      <form action='<c:url value="/carrinho/add" />' method="post" class="container">
        <ul id="variants" class="clearfix">
            <input type="hidden" value="${produto.id}" name="produtoId" />
              <c:forEach items="${produto.precos}" var="preco">
                  <li class="buy-option">
                    <input type="radio" name="tipo" class="variant-radio" id="tipo" value="${preco.tipo}"  checked="checked"  />
                    <label  class="variant-label">
                      ${preco.tipo}
                    </label>
                    <small class="compare-at-price">R$ 39,90</small>
                    <p class="variant-price">${preco.valor}</p>
                  </li>
              </c:forEach>        
        </ul>
        <button type="submit" class="submit-image icon-basket-alt" alt="Compre Agora" title="Compre Agora ${produto.titulo}"></button>

      </form>

    </section>

    <div class="co
8 respostas

Oi Daiane,

Como está a sua asse CarrinhoComprasController? É esse controle que deveria estar sendo chamado.

Ola Joel, ela está assim:

package br.com.casadocodigo.loja.controllers;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.ModelAndView;

import br.com.casadocodigo.loja.daos.ProdutoDAO;
import br.com.casadocodigo.loja.models.CarrinhoCompras;
import br.com.casadocodigo.loja.models.CarrinhoItem;
import br.com.casadocodigo.loja.models.Produto;
import br.com.casadocodigo.loja.models.TipoPreco;

@Controller
@RequestMapping("/carrinho")
@Scope(value=WebApplicationContext.SCOPE_REQUEST)
public class CarrinhoComprasController {

    @Autowired
    private ProdutoDAO produtoDao;

    @Autowired
    private CarrinhoCompras carrinho;

    @RequestMapping(value="/add", method=RequestMethod.POST)
    public ModelAndView add(Integer produtoId, TipoPreco tipo ) {
        ModelAndView modelAndView = new ModelAndView("redirect:/carrinho");
        CarrinhoItem carrinhoItem = criaItem(produtoId, tipo);
        carrinho.add(carrinhoItem);
        return modelAndView;
    }

    private CarrinhoItem criaItem(Integer produtoId, TipoPreco tipo) {
        Produto produto = produtoDao.find(produtoId);
        CarrinhoItem carrinhoItem = new CarrinhoItem(produto, tipo);
        return carrinhoItem;
    }

    @RequestMapping(method=RequestMethod.GET)
    public ModelAndView itens(){
        return new ModelAndView("/carrinho/itens");
    }
}

Oi Daiane, desculpa a demora, inclusive espero que você já tenha resolvido, mas tenta fazer essa alteração: de:

@RequestMapping(value="/add", method=RequestMethod.POST)

para;

@RequestMapping(value="/add")

Oi, eu já tinha feito essa troca. Mas não funcionou. Continua dando 404 para essa url: http://localhost:8080/casadocodigo/carrinho/produtos

Acredito que estou com mesmo problema. Quando chamo uma action do tipo /nome, o redirecionamento ocorre normalmente; mas se chamo uma action /nome/add, por exemplo, o método é executado normalmente, porém o ModelAndView não direciona para a página, ele se perde e não encontra a página. Alguém tem ideia do que pode ser?

Oi Daiana, você pode colocar o seu projeto no github e passar o link?

Daiana, bom dia. Veja se não foi o mesmo problema que tive. Eu havia configurado o diretório das views errado:

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

Estava faltando a barra antes:

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

Joel,

segue o link no GitHub: https://github.com/daianerangel/casadocodigo

Leandro,

conferi minha configuração das views e já estava com a "/".

Obrigada.