Ajuda método de Alteração JSF e Hibernate

0 respostas
BtAquino

Boa noite,

Pessoal, estou seguindo um curso Casa do Código de JSF e estou tento problemas com a alteração.

Segui o exemplo proposto no livro, porém quando clico para alterar, meu método acaba salvando um novo registro no banco.

Provavelmente o problema está na passagem do ID por parametro, embora no livro tenha dito que não era necessário passar o ID se usar a anotação
@ViewScoped , porém o ID não é passado usando a anotação. Alguém pode me ajudar?

Segue o fonte:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Cadastro de Produtos</title>
    </h:head>
    <h:body>
        <h:form>

            <h2>
                <h:outputText value="Novo Produto"
                              rendered="#{empty produtoBean.produto.id}"/>
                <h:outputText value="Editar Produto" rendered="#{not empty produtoBean.produto.id}"/>
            </h2>


            <h:panelGrid>
                <h:outputLabel value="Descrição" for="descricao"/>
                <h:inputText id="descricao" value="#{produtoBean.produto.descricao}"/>
                <h:outputLabel value="Unidade" for="unidade"/>
                <h:inputText id="unidade" value="#{produtoBean.produto.unidade}"/>
                <h:outputLabel value="Preço" for="preco"/>
                <h:inputText id="preco" value="#{produtoBean.produto.preco}"/>
                <h:commandButton value="Gravar" action="#{produtoBean.gravar()}"/>

                <!-- Lista de Produtos-->
                <h:dataTable value="#{produtoBean.produtos}" var="produto">
                    <h:column>
                        <f:facet name="header">Descrição</f:facet>
                            #{produto.descricao}
                    </h:column>
                    <h:column>
                        <f:facet name="header">Unidade</f:facet>
                            #{produto.unidade}
                    </h:column>
                    <h:column>
                        <f:facet name="header">Preço</f:facet>
                            #{produto.preco}
                    </h:column>
                    <h:column>
                        <f:facet name="header">Ações</f:facet>
                        <h:commandLink action="#{produtoBean.remover(produto)}" value="Remover"/>
                        <h:commandLink value="Alterar">
                            <f:setPropertyActionListener value="#{produto}" target="#{produtoBean.produto}"/>
                        </h:commandLink>
                    </h:column>

                </h:dataTable>
            </h:panelGrid>
        </h:form>

    </h:body>
</html>

Método no ManagerBean

public void gravar(){
        Dao<Produto> dao = new Dao<Produto>(Produto.class);
        System.out.println("ID DO PRODUTO" + produto.getId());
        if(this.produto.getId() != null){ 
            System.out.println(produto.getId());
           dao.atualizar(produto);
        }else{
           dao.adicionar(produto); 
        }
        
        this.produtos = dao.getListaTodos();
        this.produto = new Produto();
    }

Dao

@Override
    public void atualizar(T obj) {
        EntityManager em = JPAHibernateUtil.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        em.merge(obj);
        tx.commit();
        em.close();
    }

Desde já, agradeço!

Criado 15 de março de 2013
Respostas 0
Participantes 1