Porque o update não ta funcionando?

8 respostas
maiconkf

Olá, to com problemas para alterar os dados de um cadastro.
Eu tenho uma tabela com um botão de editar que manda as informações da linha da tabela para a área de cadastro, porém, o botão de atualizar não ta funcionando não sei pq!!

Aí vai o código:

VeiculoDAO:
@Override
    public void update(Veiculo value) {
        if (this.valida(value)) {
            em.merge(value);
        }
    }
veiculoMNG (managed bean):
private final String UPDATE = "atualizar";
...
 public String getAcao() {
        return acao;
    }

    public void setAcao(String acao) {
        this.acao = acao;
    }
...
public void actionSalvar() {
        System.out.println("actionevent");
        if (UPDATE.equals(this.acao)) {
            System.out.println("update");
            Veiculo veiculo = new Veiculo();
            veiculo.setId(Long.valueOf(id));
            veiculo.setDescricao(descricao);
            veiculo.setCapacidade(capacidade);
            veiculo.setConsumo(consumo);
            dao.update(veiculo);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Cadastro Realizado Com Sucesso !", ""));

        } else {
            System.out.println("save");
            Veiculo veiculo = new Veiculo();
            veiculo.setDescricao(descricao);
            veiculo.setConsumo(consumo);
            veiculo.setCapacidade(capacidade);
            dao.create(veiculo);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Cadastro Realizado Com Sucesso !", ""));

        }
    }
newveiculo.xhtml
<h:inputText value="#{veiculoMNG.acao}"/>
                    <p:messages id="msg" showDetail="true" autoUpdate="true"/>
                    <p:commandButton  value="Salvar"  actionListener="#{veiculoMNG.actionSalvar}" ajax="false" />

Esse código não dá erro nenhum! Se eu clico no botão da tabela pra editar e mando atualizar, não acontece nada! Parece que nem entra no if do update!
Mas se eu for cadastrar um novo, ele cadastra normal!

Alguém pode me ajudar????

8 Respostas

D

private String acao; esta declarado ?

maiconkf

sim, está declarado.
esqueci de colocar aqui

Rodrigo_Sasaki

Use um depurador, veja se ele de fato entra no if, e acessa o método do DAO, caso isso aconteça, verifique se ele entra no if do método valida.

Caso os 2 sejam verdadeiros precisamos de mais informações. Como estão sendo controladas suas transações?

maiconkf

Não to conseguindo depurar ://

maiconkf

ae pessoal, consegui fazer o update.. mas tem um porém..
ele só altera os dados se clicar duas vezes no botão salvar!
no primeiro clique nao acontece nada, no segundo ele dá o update

o código ficou assim:
public void actionSalvar() {  
        System.out.println("actionevent");  
        if (UPDATE.equals(this.acao)) {  
          update();

        } else {  
            System.out.println("save");  
            Veiculo veiculo = new Veiculo();  
            veiculo.setDescricao(descricao);  
            veiculo.setConsumo(consumo);  
            veiculo.setCapacidade(capacidade);  
            dao.create(veiculo);  
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Cadastro Realizado Com Sucesso !", ""));  
  
        }  
    }  

public void update() {
            Veiculo veiculo = new Veiculo();  
            veiculo.setId(Long.valueOf(id));  
            veiculo.setDescricao(descricao);  
            veiculo.setCapacidade(capacidade);  
            veiculo.setConsumo(consumo);  
            dao.update(veiculo);  
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Registro Alterado Com Sucesso !", ""));  
  }

alguém sabe por que?

Markus_Alemao

Cara verifica com que valor essa sua variavel ‘acao’ esta, depurando ou logo abaixo do metodo actionSalvar insere o seguinte:

System.out.println(this.acao);

Outra coisa, voce poderia se valer do metodo saveOrUpdate do Hibernate, que insere um novo registro caso o objeto não possua um id, caso contrario ele se encarrega de fazer o update.

maiconkf

Markus Alemao:
Cara verifica com que valor essa sua variavel ‘acao’ esta, depurando ou logo abaixo do metodo actionSalvar insere o seguinte:

System.out.println(this.acao);

Outra coisa, voce poderia se valer do metodo saveOrUpdate do Hibernate, que insere um novo registro caso o objeto não possua um id, caso contrario ele se encarrega de fazer o update.

Não sei muito bem como é o Hibernate…
E nao sei pq nenhum system imprime o valor no netbeans!
Qualquer System.out.println não dá nenhum resultado :confused:

JulianaJolie

maiconkf, sei que o post é antigo, mas queria saber se você conseguiu resolver o seu problema…
Estou com problema semelhante na minha aplicação.

Obrigada!

Criado 7 de julho de 2012
Ultima resposta 21 de mar. de 2013
Respostas 8
Participantes 5