Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida Cadastro de produtos - Como fazer a edição?

Olá! Concluí o curso e sinto a falta de fazer o update no produto! Afinal o CRUD é importante em qualquer sistema, com o pouco de experiência, tenho dúvidas em como fazer corretamente, respeitando as boas práticas de programação.

Posso usar a mesma view para efetuar a edição, ou criao uma view só para edição?

Como retornar o objeto do banco e preencher os inputs?

Como fazer o update com hibernate? pelo que pesquisei, o manager.merge(produto) pode não ser tão simples.

Ficaria grato se adicionassem ao curso todo o processo necessário para a edição do cadastro do produto, desde a view, passando pelo controller e chegando ao dao. Pois aí entenderia que o curso estaria completo.

1 resposta
solução!

Boa tarde Vinicius,

Não sei te dar certeza referente as boas práticas de programação, mas vou te falar como eu resolvi essas suas duvidas no projeto que eu fiz. Pode já ser uma ajuda para continuar. Vamos lá..

Para fazer a edição, como eu iria usar os mesmos campos, usei a mesma view mesmo. Com algumas poucas modificações (como colocar um campo hidden com o ID) ela funcionou perfeitamente para meu propósito.

Para preencher os campos com os dados do banco, é só lembrar que no método que vc chama o formulário no controller, você coloca um produto em branco no formulario. Como você quer editar, é só preencher o produto antes de retornar a view. O que fiz ficou +/- assim:

    @RequestMapping(value="/{numeroProduto}/editar", method=RequestMethod.GET)
    public ModelAndView formEditar(@PathVariable("numeroProduto") Long numeroProduto){
        ModelAndView view = new ModelAndView();
        view.setViewName("produto/cadastro_produto");
        view.addObject("produto", produtoDao.pesquisaProduto(numeroProduto)); //o dao retorna um produto e adiciona na view, tipo como você fez na tela de mostrar detalhe do produto.

        return view;
    }

Meu método deve estar um pouco diferente do padrão da aula mas é pq eu mexi no projeto e não lembro com era antes. Depois disso, quando você for salvar o produto, ele vai ser levado para o mesmo método gravar que você insere o produto, então nele você tem que verificar se é uma inserção ou edição para mandar para o método correto no DAO.

Para fazer o update com o hibernate, é exatamente fazendo o manager.merge(produto), você só tem que lembrar que como é um update, o produto não pode estar com o campo id (ou o que for sua chave primaria o banco) vazio/null, se não o hibernate não vai saber em qual produto do banco dar o update.

Acho que é isso. Tente fazer ai e qualquer coisa você pergunta novamente.