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>
