Olá galera, estou tendo dificuldades nas validações de um carrinho de compras. Toda a parte de adição e remoção de itens no carrinho, cálculo de valores já estão funcionando perfeitamente. Acontece que preciso do seguinte requisito:
- Ao adicionar o mesmo item no carrinho apenas a quantidade deve ser aumentada, sem que na tela de listagem dos itens do carrinho o item apareça repetido em duas linhas.
package br.bmweb.bean;
public class Item {
private Produto produto;
private Integer quantidade;
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public Integer getQuantidade() {
return quantidade;
}
public void setQuantidade(Integer quantidade) {
this.quantidade = quantidade;
}
}
package br.bmweb.controller;
import java.util.List;
import br.bmweb.bean.Carrinho;
import br.bmweb.bean.Item;
import br.bmweb.bean.Produto;
import br.bmweb.dao.ProdutoDao;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
@Resource
public class CarrinhoController {
private final Carrinho carrinho;
private final ProdutoDao dao;
private final Result result;
public CarrinhoController(Carrinho carrinho, ProdutoDao dao, Result result) {
this.carrinho = carrinho;
this.dao = dao;
this.result = result;
}
/*@Get
@Path("/carrinho/carrinhoTeste")*/
public void visualiza() {
}
public List<Produto> carrinhoTeste(){
return dao.listaTudo();
}
/*@Post
@Path("/carrinho/carrinhoTeste")*/
public void adiciona(Item item) {
dao.recarrega(item.getProduto());
carrinho.adiciona(item);
//System.out.println("Itens: Controller: " + carrinho.getItens());
result.redirectTo(CarrinhoController.class).visualiza();
}
//@Delete
//@Path("/carrinho/carrinhoTeste/{indiceItem}")
/*public void remove(int indiceItem) {
carrinho.remove(indiceItem);
result.redirectTo(CarrinhoController.class).visualiza();
}*/
public void remove(int indiceItem) {
carrinho.remove(indiceItem);
result.redirectTo(CarrinhoController.class).visualiza();
}
}
package br.bmweb.bean;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.Cookie;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.SessionScoped;
@Component
@SessionScoped
public class Carrinho {
private List<Item> itens = new ArrayList<Item>();
private Double total = 0.0;
public List<Item> getItens() {
return itens;
}
public void setItens(List<Item> itens) {
this.itens = itens;
}
public Double getTotal() {
return total;
}
public void setTotal(Double total) {
this.total = total;
}
public void adiciona(Item item) {
itens.add(item);
total += item.getProduto().getValor() * item.getQuantidade();
if(itens.indexOf(item.getProduto())){
}
System.out.println("Valor de itens: " + itens.indexOf(item.getProduto()));
}
/*public void remove(int indiceItem) {
Item removido = itens.remove(indiceItem);
total -= removido.getProduto().getValor() * removido.getQuantidade();
}*/
public void remove(int indiceItem) {
Item removido = itens.remove(indiceItem);
total -= removido.getProduto().getValor() * removido.getQuantidade();
}
public Integer getTotalDeItens() {
return itens.size();
}
}
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h3>Itens do seu carrinho de compras</h3>
<table>
<thead>
<tr>
<th>Descrição</th>
<!-- <th>Preço</th> -->
<th>Qtde</th>
<!-- <th>Total</th> -->
</tr>
</thead>
<tbody>
<c:forEach items="${carrinho.itens}" var="item">
<tr>
<td>${item.produto.descricao_produto }</td>
<!-- <td><fmt:formatNumber type="currency" value="${item.produto.valor}" /></td> -->
<td>${item.quantidade }</td>
<!-- <td><fmt:formatNumber type="currency" value="${item.quantidade * item.produto.valor}" /></td> -->
</tr>
<form action="remove" method="POST">
<button name="_method" value="DELETE">Remover</button>
</form>
</c:forEach>
</tbody>
<tfoot>
<tr>
<td colspan="2"></td>
<!-- <th colspan="2">Total:</th> -->
<!-- <th><fmt:formatNumber type="currency" value="${carrinho.total}" /></th> -->
</tr>
</tfoot>
</table>
</body>
</html>