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

Problema Aula 12: Carrinho de compras

Olá estou com um problema um tanto estranho aqui na aula 12. Ao clicar em comprar é chamado meu /carrinho/add, e em seguida recebo HTTP Status 400 - The request sent by the client was syntactically incorrect. No console do tomcat não aparece nenhum tipo de erro nem nada do tipo. Alguém tem uma dica do que pode ser?

Outra dúvida que tenho é em relação ao problema apresentado na aula 12 sobre o tipoPreco, o qual o nome no jsp não era o mesmo. Como o layout da casa do código não é mais o mesmo e não existem mais selects, meu jsp ficou assim.

detalhe.jsp:

<form action="<c:url value="/carrinho/add" />" method="POST" class="adicionarAoCarrinho">
    <ul class="adicionarAoCarrinho-listaOfertas">
    <input type="hidden" value="${produto.id}" name="produtoId" />
        <c:forEach items="${produto.precos}" var="preco">
            <li class="adicionarAoCarrinho-oferta" itemprop="offers" itemscope itemtype="http://schema.org/Offer">
                <label class="adicionarAoCarrinho-infosDaOferta" for="product-variant-970167977">
                    <span class="adicionarAoCarrinho-tipoDaOferta"
                         role="presentation"
                         itemprop="category"
                          itemscope itemtype="http://schema.org/Ebook" >

                        <span class="adicionarAoCarrinho-tipoDaOferta-nome">
                            ${preco.tipo}
                        </span>

                        <small class="adicionarAoCarrinho-tipoDaOferta-detalhe">
                            (.pdf, .epub e .mobi)
                        </small>

                    </span>
                    <p class="adicionarAoCarrinho-preco">
                        <small class="adicionarAoCarrinho-preco-promocao">
                            <del class="adicionarAoCarrinho-preco-promocao-valor">R$ 39,90</del> por
                        </small>
                        <span class="adicionarAoCarrinho-preco-valor" itemprop="price">
                            ${preco.valor}
                        </span>

                    </p>
                </label>
                <button class="adicionarAoCarrinho-botaoComprar" type="submit" name="tipoPreco" value="970167977" title="Compre o E-book">
                    Comprar
                </button>
                </c:forEach>
            </li>
    </ul>
</form>

CarrinhoComprasController.java

package br.com.casadocodigo.loja.controller;

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.dao.ProdutoDAO;
import br.com.casadocodigo.loja.model.CarrinhoCompras;
import br.com.casadocodigo.loja.model.CarrinhoItem;
import br.com.casadocodigo.loja.model.Produto;
import br.com.casadocodigo.loja.model.TipoPreco;

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

    @Autowired
    private ProdutoDAO produtoDAO;

    @Autowired
    private CarrinhoCompras carrinho;

    @RequestMapping("add")
    public ModelAndView add(Integer produtoId, TipoPreco tipoPreco) {
        ModelAndView modelAndView = new ModelAndView("redirect:/carrinho");
        CarrinhoItem carrinhoItem = criaItem(produtoId, tipoPreco);

        carrinho.add(carrinhoItem);

        return modelAndView;
    }

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

    private CarrinhoItem criaItem(Integer produtoId, TipoPreco tipoPreco) {
        Produto produto = produtoDAO.find(produtoId);
        CarrinhoItem carrinhoItem = new CarrinhoItem(produto, tipoPreco);
        return carrinhoItem;
    }
}
2 respostas

Olá,

Tente alterar o seu requestMapping de:

@RequestMapping("add")

para:

@RequestMapping("/add")

Acredito que assim passe a funcionar.

Não entendi sua outra dúvida, consegue explicar melhor?

solução!

Na verdade acabei resolvendo Lucas, mas obrigado pela reposta, o problema era na tag no meu jsp no atributo value, eu não estava passando nada. Agora passando o ${preco.tipoPreco} no value, tudo se resolveu.