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

Update de um dado com Spring MVC

Galere, boa tarde!

quero fazer um update e estou perdido no meio do caminho:

controller:

@RequestMapping(value = "/update/{id}")
    private ModelAndView update(@PathVariable("id") int id){
        ModelAndView view = new ModelAndView("formUpdate");
        Cliente cli = dao.singleCli(id);
        view.addObject("cli", cli);
        return view;
    }
    @RequestMapping(value = "/update")
    private String updateCli(Cliente cli){
        System.out.println(cli);
        dao.update(cli);
        return "redirect:/read";
    }

view:

    <form action="${s:mvcUrl('HC#updateCli').build() }" method="POST">
        <label>Nome:</label> 
        <input type="text" name="nomeCli"  value="${cli.nomeCli }"> 
        <input type="hidden" name="codCli" value="${cli.codCli }">
        <label>Estado:</label>
        <input type="text" name="estado" value="${ cli.estado}">

        <button type="submit">enviar</button>
    </form>

o resultado que eu tenho quando clico em algum cliente em uma view, é um pagina com um form ja preenchido com os dados do cliente que eu cliquei.

quando eu envio, o hibernate so faz o select e n faz o update. sera que é por que eu to passando no value do input um valor ?

por que minha ideia e carrgar o valor dos dados no input do form e depis de alterar mandar o update pro banco.

alguma ideia melhor ou dicas de como fazer isso. Artigos e videos também são bem vindos.

2 respostas

meu metodo de update no dao ta assim:

public void update(Cliente cli) {
        // em.createQuery("UPDATE from Cliente c set c.nomeCli = :nome where
        // ").setParameter("id", cli.getCodCli()).executeUpdate();
        Cliente cliente = em.find(Cliente.class, cli.getCodCli());
        em.merge(cliente);
    }
solução!

Consegui resolver:

eu so precisei trazer o estado do objeto para managed antes de fazer o merge.