Bom dia pessoal. Em um projeto pessoal, com base na aula, tenho um caso que apresenta o seguinte problema ao alterar:
Quando clico em "Gravar" ele insere uma nova linha.
No meu caso agr eu tenho um atributo ManyToOne. Não sei se é por isso, eu até acho que sim. Estou dando uma olhada nisso.
<?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"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:composition template="/templates/_template.xhtml">
<ui:define name="titulo">
Nova Movimentação
</ui:define>
<ui:define name="conteudo">
<h:form>
<h:messages id="messages" />
<fieldset>
<legend>Ativo</legend>
<h:panelGrid columns="2">
<h:outputLabel value="Selecione o Ativo:" for="ativo" />
<h:selectOneMenu value="#{movimentacaoBean.ativoId}" id="ativo">
<f:selectItems value="#{movimentacaoBean.ativos}" var="ativo"
itemLabel="#{ativo.nome}" itemValue="#{ativo.id}" />
</h:selectOneMenu>
<h:commandLink value="Cadastrar novo ativo" action="ativo"
immediate="true" />
</h:panelGrid>
</fieldset>
<fieldset>
<legend>Movimentação</legend>
<h:panelGrid columns="2">
<h:outputLabel value="Data movimentação:" for="dataMovimentacao" />
<h:inputText id="dataMovimentacao"
value="#{movimentacaoBean.movimentacao.dataMovimentacao.time}">
<f:convertDateTime pattern="dd/MM/yyyy"
timeZone="America/Sao_Paulo" />
</h:inputText>
<h:outputLabel value="Tipo Movimentação:" for="tipoMovimentacao" />
<h:selectOneMenu
value="#{movimentacaoBean.movimentacao.tipoMovimentacao}"
id="tipoMovimentacao">
<f:selectItems value="#{movimentacaoBean.tipoMovimentacoes}"
var="tipoMovimentacao" itemLabel="#{tipoMovimentacao}"
itemValue="#{tipoMovimentacao}" />
</h:selectOneMenu>
<h:outputLabel value="Quantidade:" for="quantidade" />
<h:inputText id="quantidade"
value="#{movimentacaoBean.movimentacao.quantidade}"
required="true" requiredMessage="Descrição Obrigatório">
<f:ajax event="blur" render="messages" />
</h:inputText>
<h:outputLabel value="Valor Unitário:" for="vlrUnitario" />
<h:inputText id="vlrUnitario"
value="#{movimentacaoBean.movimentacao.vlrUnitario}"
required="true" requiredMessage="Descrição Obrigatório">
<f:ajax event="blur" render="messages" />
</h:inputText>
</h:panelGrid>
</fieldset>
<h:commandButton value="Gravar" action="#{movimentacaoBean.gravar}">
<f:ajax execute="@form"
render="@form :formTabelaMovimentacoes:tabelaMovimentacoes" />
</h:commandButton>
</h:form>
<h:form id="formTabelaMovimentacoes">
<h:dataTable value="#{movimentacaoBean.movimentacoes}"
var="movimentacao" id="tabelaMovimentacoes">
<h:column>
<f:facet name="header">Nome Ativo</f:facet>
<h:outputText value="#{movimentacao.ativo.nome}" />
</h:column>
<h:column>
<f:facet name="header">Data Movimentação</f:facet>
<h:outputText value="#{movimentacao.dataMovimentacao.time}">
<f:convertDateTime pattern="dd/MM/yyyy"
timeZone="America/Sao_Paulo" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">Tipo Movimentação</f:facet>
<h:outputText value="#{movimentacao.tipoMovimentacao}" />
</h:column>
<h:column>
<f:facet name="header">Quantidade</f:facet>
<h:outputText value="#{movimentacao.quantidade}" />
</h:column>
<h:column>
<f:facet name="header">Valor Unitário</f:facet>
<h:outputText value="#{movimentacao.vlrUnitario}">
<f:convertNumber type="currency" pattern="R$ #0.00"
currencySymbol="R$" locale="pt_BR" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">Valor Total</f:facet>
<h:outputText value="#{movimentacao.vlrTotal}">
<f:convertNumber type="currency" pattern="R$ #0.00"
currencySymbol="R$" locale="pt_BR" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">Alterar</f:facet>
<h:commandLink value="alterar"
action="#{movimentacaoBean.carregar(movimentacao)}" />
</h:column>
<h:column>
<f:facet name="header">Remover</f:facet>
<h:commandLink value="remover"
action="#{movimentacaoBean.remover(movimentacao)}" />
</h:column>
</h:dataTable>
</h:form>
</ui:define>
<ui:define name="texto">
Cadastro de Movimentação
</ui:define>
</ui:composition>
</html>