Salvar carrinho que está na sessão

8 respostas
101574

E ae Galera,
Tenho um carrinho salvo na sessão. Como faço para salvar ele no banco.
Utilizo Vraptor 3.0 e Hibernate.
Segue minhas classes.

Carrinho.java

@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().getPreco() * item.getQuantidade();
		}
	public Integer getTotalDeItens() {
		return itens.size();
		}
	public void remove(int indiceItem) {
		Item removido = itens.remove(indiceItem);
		total -= removido.getProduto().getPreco() * removido.getQuantidade();
	}
	public void alterar(Item item, int indiceItem) {
		Item removido = itens.remove(indiceItem);
		total -= removido.getProduto().getPreco() * removido.getQuantidade();
		itens.add(item);
		total += item.getProduto().getPreco() * item.getQuantidade();
	}
		

}

Item.java

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;
}

}

CarrinhoController.java

@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("/carrinho")
public void visualiza() {
}
@Post("/carrinho")
public void adiciona(Item item) {
dao.recarrega(item.getProduto());
carrinho.adiciona(item);
result.redirectTo(this).visualiza();
}
@Delete("/carrinho/{indiceItem}")
public void remove(int indiceItem) {
carrinho.remove(indiceItem);
result.redirectTo(this).visualiza();
}
@Put("/carrinho/{indiceItem}")
public void alterar(int indiceItem,Item item) {
carrinho.alterar(item, indiceItem);
result.redirectTo(this).visualiza();
}
}

vizualiza.jsp

<table align="left">
<thead>
<tr>
<th>Nome</th>
<th>Fabricante</th>
<th>Preço</th>
<th>Qtde</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<c:forEach items="${carrinho.itens}" var="item" varStatus="s">
<tr>
<td>${item.produto.nome }</td>
<td>${item.produto.fabricante}</td>
<td>
<fmt:formatNumber type="currency"
value="${item.produto.preco}"/>
</td>
<td>${item.quantidade }</td>
<td>
<fmt:formatNumber type="currency"
value="${item.quantidade * item.produto.preco }"/>
<td>
<form action="<c:url value="/carrinho/${s.index }"/>" method="POST">
<button class="link" name="_method" value="DELETE">Remover</button>
</form>
</td>
<td>
<form action="<c:url value="/carrinho/${s.index}"/>" method="POST">
<button class="link" name="_method" value="DELETE">Alterar</button>
</form>
</td>

</tr>
</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>
<table align="center"><tr><td>
<form action="<c:url value="/carrinho/salva"/>">
<button type="submit" name="_method" value="POST">Imprimir/Salvar</button>
</form>
</td></tr></table>

8 Respostas

Hebert_Coelho

Você pode, a cada item que o usuário adicionar, você adiciona o item no DB.

101574

Beleza!
Mais, eu queria tipo assim!
Quando terminar o pedido, salvar no banco, carrinho_id = 1;
Itens - valor unit - valor total.
E passar pra uma tela onde mostra o carrinho, com o id para a pessoa depois, poder reclamar o pedido que não chegou e tal.
Como eu faço?

Hebert_Coelho

Na hora do click para finalizar, você pega o cara no carrinho e salva. Não entendi qual o problema.

Basta fazer o mesmo processo já feito. Você já não colocou na sessão? Só tirar e ir salvando item por item.

101574

Tem como você postar um exemplo.
Entendi a lógica, não sei como eu faço.rsrs.

Hebert_Coelho

101574:
Tem como você postar um exemplo.
Entendi a lógica, não sei como eu faço.rsrs.
Posso te ajudar a fazer. Mas não faço. :stuck_out_tongue:
Como que você pega um objeto da sessão? Se você não sabe, como que você colocou?

101574

Eu sei como coloquei!rsrs
E que assim, minha classe Produtos já está no banco.
Já minha classe Itens e Carrinho não.
Ai vamos lá.
Eu vou colocar o hibernate para gerenciar meu carrinho e meu item.
Beleza!
Ai como eu vou ter o dado do meu carrinho, e dos meus itens que fazem parte daquele carrinho?

Hebert_Coelho

101574:
Eu sei como coloquei!rsrs
E que assim, minha classe Produtos já está no banco.
Já minha classe Itens e Carrinho não.
Ai vamos lá.
Eu vou colocar o hibernate para gerenciar meu carrinho e meu item.
Beleza!
Ai como eu vou ter o dado do meu carrinho, e dos meus itens que fazem parte daquele carrinho?
Cara, sessão que você está falando é sessão do hibernate o httpsession?
Se for httpsession continue lendo, se for session do hibernate outra pessoa irá te ajudar.
Como que você está colocando um carrinho do httpsession?

101574

E na sessão do Vraptor.rsrsrs.
Valeu!

Criado 11 de setembro de 2012
Ultima resposta 11 de set. de 2012
Respostas 8
Participantes 2