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:
[code]<?xml version='1.0' encoding='UTF-8' ?>
Cadastro de Produtos <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>
[/code]
Método no ManagerBean
[code] public void gravar(){
Dao dao = new Dao(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();
}[/code]
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!