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

Problema ao excluir item do carrinho

Boa tarde, estou tendo problemas ao tentar excluir um item do carrinho. Esta passando pelo controller e pelo metodo de excluir, porem nada acontece. Acho que alguma coisa na minha classe CarrinhoCompras ou na classe CarrinhoItem pode estar errado. Notei tambem que ao inserir dois itens iguais nao esta atualizando quantidade e sim criando outro item no carrinho.

Segue as classes: CarrinhoItem

package br.com.casadocodigo.loja.models;

import java.math.BigDecimal;

import org.springframework.stereotype.Component;


public class CarrinhoItem {

    private Produto produto;
    private TipoPreco tipoPreco;

    public CarrinhoItem(Produto produto, TipoPreco tipoPreco) {
        this.produto = produto;
        this.tipoPreco = tipoPreco;
    }

    public BigDecimal getPreco(){
        return produto.precoPara(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;
    }

    public BigDecimal getTotal(int quantidade) {
        return this.getPreco().multiply(new BigDecimal(quantidade));
    }

}

CarrinhoCompras

package br.com.casadocodigo.loja.models;

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

import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Component;
import org.springframework.web.context.WebApplicationContext;

@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 Collection<CarrinhoItem> getItens() {
        return itens.keySet();
    }

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

    }

    public Integer 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 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();
        System.out.println("Passou pelo model do carrinho de compras");
        produto.setId(produtoId);
        itens.remove(new CarrinhoItem(produto, tipoPreco));
}

}
2 respostas
solução!

Opa, vc não implementou o equals e nem o hashCode na classe CarrinhoItem :). Desse jeito o set não trabalha direito...

Muito obrigado era isso mesmo!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software