Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Nao estou conseguindo remover itens do carrinho de compras

Fala galera ! não to conseguindo remover itens do carrinho de compras , simplemeste o método remove , nao está funcionando para mim, a pagina so recarrega com os itens novamente , embora esteje passando pelo método remover e alimentando os objetos corretamente, segue os codigos .

package br.casadocodigo.loja.models;

import br.casadocodigo.loja.controllers.CarrinhoItem;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Component;
import org.springframework.web.context.WebApplicationContext;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;

@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION, proxyMode= ScopedProxyMode.TARGET_CLASS)

public class CarrinhoCompras implements Serializable {

    private static final long serialVersionUID = 1L;

    private Map<CarrinhoItem, Integer> itens = new LinkedHashMap<CarrinhoItem, Integer>();


    public void add (CarrinhoItem item){
        itens.put(item, getQuantidade(item) + 1);
    }

    public int getQuantidade(CarrinhoItem item) {
        if(!itens.containsKey(item)){
            itens.put(item, 0);
        }
        return itens.get(item);
    }

    public int getQuantidade(){
        return itens.values().stream().reduce(0, (proximo, acumulador) -> (proximo + acumulador));
    }

    public Collection<CarrinhoItem> getItens() {
        return itens.keySet();
    }

    public void setItens(Map<CarrinhoItem, Integer> itens) {
        this.itens = itens;
    }

    public BigDecimal getTotal(CarrinhoItem item){
        return item.getTotal(getQuantidade(item));
    }

    public BigDecimal getTotal(){
        BigDecimal total = BigDecimal.ZERO;
        for (CarrinhoItem item : itens.keySet()) {
            total = total.add(getTotal(item));
        }
        return total;
    }

    public void remover(Integer produtoId, TipoPreco tipoPreco) {
        Produto produto = new Produto();
        produto.setId(produtoId);
        itens.remove(new CarrinhoItem(produto,tipoPreco));

    }
}
   @RequestMapping("/remover")
    public ModelAndView remover(Integer produtoId , TipoPreco tipoPreco ){
        carrinho.remover(produtoId , tipoPreco);
       return new ModelAndView("redirect:/carrinho");
    }
  <c:forEach items="${carrinhoCompras.itens }"  var="item" >
            <tr>
                <td class="formularioDoCarrinho-item">
                    <a href="/products/livro-web-services-rest">
                        <img class="formularioDoCarrinho-item-imagem" src="//cdn.shopify.com/s/files/1/0155/7645/products/wv3KXH7UbTZekuaCTSDj_sIcXB-c4iy37jj7vhCbYCg_size_mode_3_size_800x600_small.jpeg?v=1460748537" />
                    </a>
                </td>
                <td class="formularioDoCarrinho-item">
                    <h2 class="formularioDoCarrinho-item-titulo">${item.produto.titulo}</h2>
                </td>
                <td class="formularioDoCarrinho-item formularioDoCarrinho-item-preco">R$ ${item.preco}</td>
                <td class="formularioDoCarrinho-item">
                    <input class="formularioDoCarrinho-item-quantidade"
                           type="number"
                           min="0"
                           id="updates_19467336775"
                           name="updates[19467336775]"
                           value="${carrinhoCompras.getQuantidade(item)}">
                </td>
                <td class="formularioDoCarrinho-item formularioDoCarrinho-item-precoTotal" title="Preço unitário: R$69,90">R$ ${carrinhoCompras.getTotal(item)}</td>
                <td class="formularioDoCarrinho-item">
                    <form action="${s:mvcUrl('CCC#remover').arg(0, item.produto.id).arg(1,item.tipo).build() }"  method="post">
                        <input type="image"  src="//cdn.shopify.com/s/files/1/0155/7645/t/232/assets/trash.png?1961868959706152171" alt="Excluir" title="Excluir" />
                    </form>
                </td>
            </tr>
      </c:forEach>
1 resposta
solução!

Pessoal tava me esquecendo de gerar o hashCode e o equals na classe CarrinhoItem. agora está funcionando.

 @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof CarrinhoItem)) return false;

        CarrinhoItem that = (CarrinhoItem) o;

        if (getProduto() != null ? !getProduto().equals(that.getProduto()) : that.getProduto() != null) return false;
        return getTipo() == that.getTipo();
    }

    @Override
    public int hashCode() {
        int result = getProduto() != null ? getProduto().hashCode() : 0;
        result = 31 * result + (getTipo() != null ? getTipo().hashCode() : 0);
        return result;
    }