Quando eu clico em “Atualizar”, os valores aparecem nos inputexts… o que eu quero é que
ao clicar em “Gravar” o método update do meu dao seja chamado, porém ->
Eu debuguei esse meu método e percebi que ele não entra no else porque ele não traz o id do registro e acaba criando um novo registro ao invés de atualizar.
public void grava() {
ProdutoDao dao = new ProdutoDao();
if(produto.getId() == null) {
dao.save(produto);
}else {
dao.update(produto);
}
this.produtos = dao.listaTodos(); //atualiza a lista com o novo produto inserido
this.produto = new Produto(); // Limpar campos criando uma nova instancia
}
Minha View:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<h:head>
Sistema de Notas Fiscais<h:outputLabel value="Descrição:" for="descricao" />
<h:inputTextarea id="descricao" value="#{produtoBean.produto.descricao}"/>
<h:outputLabel value="Preço:" for="preco" />
<h:inputText id="preco" value="#{produtoBean.produto.preco}"/>
<h:commandButton value="Gravar" action="#{produtoBean.grava}" />
</h:panelGrid>
</h:form>
<br />
<h:form>
<h:inputHidden value="#{produtoBean.produto.id}" />
<h2>
<h:outputText value="Novo Produto" rendered="#{empty produtoBean.produto.id}" />
<h:outputText value="Editar Produto" rendered="#{not empty produtoBean.produto.id}" />
</h2>
<h:dataTable value="#{produtoBean.produtos}" var="produto">
<h:column>
<f:facet name="header">Nome</f:facet>
#{produto.nome}
</h:column>
<h:column>
<f:facet name="header">Descrição</f:facet>
#{produto.descricao}
</h:column>
<h:column>
<f:facet name="header">Preço</f:facet>
#{produto.preco}
<f:facet name="footer" value="">Total: </f:facet>
<!-- #{produtoBean.getProdutos()} -->
</h:column>
<h:column>
<f:facet name="header">Ações</f:facet>
<h:commandLink action="#{produtoBean.exclui(produto)}" value="Remover"/>
</h:column>
<h:column>
<h:commandLink value="Atualizar">
<f:setPropertyActionListener value="#{produto}" target="#{produtoBean.produto}" />
</h:commandLink>
</h:column>
</h:dataTable>
</h:form>
</h:body>