Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Problema com atualização de registro

Bom dia pessal!

Eu estou com um problema ao tentar atualizar um registro existente, eu carrego o registro, porém ao salvar ele cria um "novo" registro com os dados carregados no formulario.jsp

Eu tenho a classe modelo "Usuario"...

Na listagem.jsp eu criei um link, para selecionar o registro:

                        <a href="${linkTo[UsuarioController].atualiza}?id=${usuario.id}" class="addSelecionaLista" title="Selecionar">
                        <i class="glyphicon glyphicon-log-in"></i></a>

Tenho meu formulario.jsp, com a action adiciona:

<form action="${linkTo[UsuarioController].adiciona(null)}" method="post">

Os métodos adiciona, atualiza e buscaPorId no meu UsuarioDao:

    public void adiciona(Usuario usuario) {
        manager.getTransaction().begin();
        manager.persist(usuario);
        manager.getTransaction().commit();
        manager.close();
    }

    public Usuario atualiza(int id, Result result) {
        Usuario usuario = this.buscaPorId(id);
        return usuario;
    }

    public Usuario buscaPorId(int id) {
        return manager.find(Usuario.class, id);
    }

E no meu UsuarioController, a chamada para os métodos:

    @IncludeParameters
    public void adiciona(@Valid Usuario usuario) {
        validator.onErrorRedirectTo(this).index();
        usuarioDao.adiciona(usuario);
        result.redirectTo(this).lista();
    }

    public void atualiza(int id, Result result) {
        Usuario usuario = usuarioDao.buscaPorId(id);
        result.include(usuario);
        result.of(this).index();
    }
3 respostas

Eu adicionei um "if" no método "adiciona", verificando se o registro possui ID, se SIM eu utilizo manager.merge(usuario) ; se NAO eu utilizo manager.persist(usuario)

Mas não resolveu...

Como eu faço para chamar o adiciona ou o atualiza ?

solução!

Quando você realiza um merge em um objeto ele verifica de acordo com o id setado no objeto se ele existe ou não, no seu caso parece que você esqueceu de colocar no html o campo id DENTRO do form, setando assim o id quando o formulário é submitado.

<input value="usuario.id"></input>

Perfeito Diego!! Muito obrigado!!

Abraço!