Olá amigos, estou precisando de ajuda e creio que vocês podem me ajudar.
Tenho um projeto onde possui um carrinho de compras com sessão. A sessão está funcionando perfeitamente, mas tem um detalhe, sempre que adiciono um novo item a lista do carrinho de compras ele substitui o item anterior e somente consigo adicionar um elemento.
Vou disponibilidade do código e agradeço desde já!
Getters e setters da classe item pedido
public class UspItemPedidoSelecaoOUT {
private Integer codPedido;
private Integer codProduto;
private BigDecimal numPreco;
private Integer numTotal;
private String nomProduto;
private String desImagem;
//...getters e setters
}
Classe carrinho de compras - que fica armazenada na sessão
public class Carrinho {
private List<UspItemPedidoSelecaoOUT> listaCarrinho = new ArrayList<UspItemPedidoSelecaoOUT>();
public List<UspItemPedidoSelecaoOUT> getListaCarrinho() {
return listaCarrinho;
}
public void setListaCarrinho(List<UspItemPedidoSelecaoOUT> listaCarrinho) {
this.listaCarrinho = listaCarrinho;
}
public List<UspItemPedidoSelecaoOUT> getCarrinhoFromSession () {
Carrinho carrinho;
carrinho = (Carrinho) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("carrinho");
return carrinho.getListaCarrinho();
}
}
metodo que recupera o carrinho
public List listar(){
FacesContext context = FacesContext.getCurrentInstance();
ResourceBundle bundle = ResourceBundle.getBundle("com.projeto.mercearia.resources.multilanguage.Messages", context.getViewRoot().getLocale());
try {
Carrinho carrinho = new Carrinho();
this.setCarrinhoFechamento(carrinho.getCarrinhoFromSession());
} catch (Exception e) {
e.printStackTrace(); // exibe erro no console
context.addMessage(null, new FacesMessage(bundle.getString("error_general"))); // adiciona mensagem p/ ser mostrada na tela
} finally {
return carrinhoFechamento;
}
}
método que seta um novo valor no carrinho *creio que o erro possa estar aqui *
public String adicionarProduto(){
Carrinho carrinho = new Carrinho();
carrinho.getListaCarrinho().add(itemPedidoSelecaoOUT);
HttpServletRequest request = (HttpServletRequest)javax.faces.context.FacesContext.getCurrentInstance().getExternalContext().getRequest();
HttpSession session = request.getSession();
session.setAttribute("carrinho", carrinho);
return "success";
}
chamada jsf do método para adicionar produto ao carrinho
<a4j:commandLink value="comprar"
styleClass="txtNormal"
style="color:blue"
action="#{ProdutoMB.adicionarProduto}">
<a4j:actionparam name="codProduto"
value="#{produto.codProduto}"
assignTo="#{ProdutoMB.itemPedidoSelecaoOUT.codProduto}"/>
<a4j:actionparam name="nome"
value="#{produto.nomProduto}"
assignTo="#{ProdutoMB.itemPedidoSelecaoOUT.nomProduto}"/>
<a4j:actionparam name="preco"
value="#{produto.numPreco}"
assignTo="#{ProdutoMB.itemPedidoSelecaoOUT.numPreco}"/>
<a4j:actionparam name="imagem"
value="#{produto.desImagem}"
assignTo="#{ProdutoMB.itemPedidoSelecaoOUT.desImagem}"/>
<a4j:actionparam name="numTotal"
value="#{produto.desImagem}"
assignTo="#{ProdutoMB.itemPedidoSelecaoOUT.numTotal}"/>
</a4j:commandLink>
muito obrigado e abraço a todos!