1
resposta

Produto não aparece no carrinho

Não consigo mandar o produto para o carrinho, é como se o hibernate não encontrasse o livro para mandar para o ItemCompra. Alguém pode me ajudar?

form detalhe-livro

<form method="POST" class="adicionarAoCarrinho" jsf:id="comprar">

                <p class="adicionarAoCarrinho-preco">
                        <small class="adicionarAoCarrinho-preco-promocao">
                            <del class="adicionarAoCarrinho-preco-promocao-valor">R$ 1099,90</del> por
                        </small>
                    <span class="adicionarAoCarrinho-preco-valor" itemprop="price">
                        R$ #{livroDetalheBean.livro.preco}
                    </span>
                </p>
            </label>
            <h:outputText value="#{livroDetalheBean.id}" />
                <button class="adicionarAoCarrinho-botaoComprar" type="submit" title="Compre o E-book" jsf:action="#{carrinhoComprasBean.add(livroDetalheBean.id)}">
                    Comprar
                </button>

CarrinhoComprasBean

@Model
public class CarrinhoComprasBean {
    @Inject
    private LivroDao dao;
    @Inject
    private CarrinhoCompras carrinho;
    public String add(Integer id) {
        Livro livro = dao.buscaPorId(id);
        ItemCompra item = new ItemCompra(livro);
        carrinho.add(item);
        return "carrinho?faces-redirect=true";        
    }
    public List<ItemCompra> getItens() {
        return new ArrayList<ItemCompra>(carrinho.getItens());
    }

}

CarrinhoCompras

@SessionScoped
@Named
public class CarrinhoCompras implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private Set<ItemCompra> itens = new HashSet<>();
    public void add(ItemCompra item)
    {
        itens.add(item);
    }
    public List<ItemCompra> getItens() {
        return new ArrayList<ItemCompra>(itens);
    }
}

carrinho.xhtml

<ui:repeat var="itemCompra" value="#{carrinhoComprasBean.itens}">
            <tr>
                <td class="formularioDoCarrinho-item">
                    <a href="#{request.contextPath}/livro-detalhe.xhtml?id=#{itemCompra.livro.id}" >
                        <img class="formularioDoCarrinho-item-imagem" src=""  />
                    </a>
                </td>
                <td class="formularioDoCarrinho-item">
                    <h2 class="formularioDoCarrinho-item-titulo">#{itemCompra.livro.titulo}</h2>
                </td>
                <td class="formularioDoCarrinho-item formularioDoCarrinho-item-preco">R$ #{itemCompra.livro.preco}</td>
                <td class="formularioDoCarrinho-item">
                    <input class="formularioDoCarrinho-item-quantidade"
                           type="number"
                           min="0"
                           value="#{carrinhoItem.quantidade}" />
                </td>
                <td class="formularioDoCarrinho-item formularioDoCarrinho-item-precoTotal" title="Preço unitário:  #{itemCompra.livro.preco}">R$#{itemCompra.livro.preco}</td>
                <td class="formularioDoCarrinho-item">
                    <a href="https://www.casadocodigo.com.br/cart/change?id=18404155847&amp;quantity=0">
                        <img class="formularioDoCarrinho-item-remover-imagem"  src="#{request.contextPath}/resources/imagens/trash.png" alt="X" title="Remover" />
                    </a>
                </td>
            </tr>
            </ui:repeat>

ItemCompra

@Model
public class ItemCompra {
    private Livro livro;
    private Integer quantidade;
    public ItemCompra(Livro livro) {
        this.livro = livro;
        this.quantidade=2;
    }
    public Livro getLivro() {
        return livro;
    }
    public void setLivro(Livro livro) {
        this.livro = livro;
    }
    public Integer getQuantidade() {
        return quantidade;
    }
    public void setQuantidade(Integer quantidade) {
        this.quantidade = quantidade;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((quantidade == null) ? 0 : quantidade.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        ItemCompra other = (ItemCompra) obj;
        if (quantidade == null) {
            if (other.quantidade != null)
                return false;
        } else if (!quantidade.equals(other.quantidade))
            return false;
        return true;
    }

}
1 resposta

Opa, faltou colocar o método que adiciona o item do CarrinhoComprasBean.