Estou com problema para adicionar um item no carrinho...
Ao clicar no botão para adicionar e "HTTP Status 404 – Not Found".
Já revisei todos e incluse comparei com outroscódigo que encontre aqui no forum mas ainda o problema persiste.
<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 itemscope class="variant-label" >${preco.tipo } </label>
<small class="compare-at-price">${preco.valor}</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>
CarrinhoComprasController:
package br.com.alura.loja.controllers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import br.com.alura.loja.daos.ProdutoDAO;
import br.com.alura.loja.models.CarrinhoCompras;
import br.com.alura.loja.models.CarrinhoItem;
import br.com.alura.loja.models.Produto;
import br.com.alura.loja.models.TipoPreco;
@Controller
@RequestMapping("/carrinho")
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:/produtos");
CarrinhoItem carrinhoItem = criaItem(produtoId, tipoPreco);
carrinho.add(carrinhoItem);
return modelAndView;
}
private CarrinhoItem criaItem(Integer produtoId, TipoPreco tipoPreco) {
Produto produto = produtoDAO.find(produtoId);
CarrinhoItem carrinhoItem = new CarrinhoItem(produto, tipoPreco);
return carrinhoItem;
}
}
CarrinhoCompras
package br.com.alura.loja.models;
import java.util.LinkedHashMap;
import java.util.Map;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.web.context.WebApplicationContext;
@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION)
public class CarrinhoCompras {
private Map<CarrinhoItem, Integer> itens = new LinkedHashMap<CarrinhoItem, Integer>();
public void add(CarrinhoItem item){
itens.put(item, getQuantidade(item) + 1);
}
private int getQuantidade(CarrinhoItem item) {
if (!itens.containsKey(item)){
itens.put(item, 0);
}
return itens.get(item);
}
public int getQuantidade(){
// Expressão (proximo, acumulador) -> proximo + acumulador) "lambida" disponóvel no java 8
return itens.values().stream().reduce(0, (proximo, acumulador) -> proximo + acumulador);
}
}
CarrinhoItem
package br.com.alura.loja.models;
public class CarrinhoItem {
private Produto produto;
private TipoPreco tipoPreco;
public CarrinhoItem(Produto produto, TipoPreco tipoPreco) {
this.produto = produto;
this.tipoPreco = tipoPreco;
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public TipoPreco getTipoPreco() {
return tipoPreco;
}
public void setTipoPreco(TipoPreco tipoPreco) {
this.tipoPreco = tipoPreco;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((produto == null) ? 0 : produto.hashCode());
result = prime * result + ((tipoPreco == null) ? 0 : tipoPreco.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
CarrinhoItem other = (CarrinhoItem) obj;
if (produto == null) {
if (other.produto != null)
return false;
} else if (!produto.equals(other.produto))
return false;
if (tipoPreco != other.tipoPreco)
return false;
return true;
}
}
Desde já obrigado!