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

Dúvida no Ex. 3 da Aula 3 - Criando um cadastro de produtos

Olá ! Gostaria de saber qual é o fluxo do Controle e JSP para alterar um registro, nos cursos não fala nada, estou tentando resolver esse problema, mais ainda não conseguir.

Poderia me passar algum exemplo, algum artigo que fala sobre?

1 resposta
solução!

Olá eu implementei a edição aqui com base na apostila :

public class ProdutoDao {

    private final EntityManager em;

    @Inject
    public ProdutoDao(EntityManager em) {
        this.em = em;
    }



    public ProdutoDao() {
        this(null);
    }



    public void adiciona(Produto produto) {
        em.getTransaction().begin();
        em.persist(produto);
        em.getTransaction().commit();
    }

    public void remove(Produto produto) {
        em.getTransaction().begin();
        em.remove(busca(produto));
        em.getTransaction().commit();
    }

    public Produto carrega(Long id) {
        return em.find(Produto.class, id);
    }


    public Produto busca(Produto produto) {
        return em.find(Produto.class, produto.getId());
    }

    @SuppressWarnings("unchecked")
    public List<Produto> lista() {
        return em.createQuery("select p from Produto p").getResultList();
    }



    public void atualiza(Produto produto) {
        em.getTransaction().begin();
        em.merge(produto);
        em.getTransaction().commit();

    }
}


@Controller
public class ProdutoController {


    private final Result result;
    private ProdutoDao dao;
    private Validator validator;






    public ProdutoController() {
        this(null,null,null);
    }



    @Inject
    public ProdutoController(Result result, ProdutoDao dao, Validator validator) {

        this.result = result;
        this.dao = dao;
        this.validator = validator;
    }



    @Get("/")
    public void inicio() {


    }



    @Get
    public void formulario(){

        System.out.println("formulario");


    }

    @Get
    public List<Produto> lista() {
       // EntityManager em = JPAUtil.criaEntityManager();
       // ProdutoDao dao = new ProdutoDao(em);
        return dao.lista();
    }


    @Post
    public void adiciona(@Valid Produto produto) {
        //EntityManager em = JPAUtil.criaEntityManager();
       // em.getTransaction().begin();
        //ProdutoDao dao = new ProdutoDao(em);
         validator.onErrorUsePageOf(this).formulario();
        dao.adiciona(produto);
       // em.getTransaction().commit();
        result.include("mensagem", "Produto adicionado com sucesso!");
        result.redirectTo(this).lista();
    }


    @Delete
    @Path("/produto")
    public void remove(Produto produto){



        // EntityManager em = JPAUtil.criaEntityManager();
       // em.getTransaction().begin();
       // Produto produtoToRemove = em.find(Produto.class,produto.getId());
       // em.remove(produtoToRemove);
      //  em.getTransaction().commit();

        Produto produtoToRemove = dao.busca(produto);
        dao.remove(produtoToRemove);
        result.redirectTo(this).lista();
    }


    @Get("/produto/{id}")
    public Produto edita(Long id) {
          return dao.carrega(id);
        }

    @Put("/produto/{produto.id}")
    public void altera(@Valid Produto produto) {
        System.out.println("antes atualizar");
         validator.onErrorUsePageOf(this).formulario();
          dao.atualiza(produto);
          result.redirectTo(this).lista();
        }

}

e por fim a jsp de edição: edita.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<html>
<head>

<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="../bootstrap/css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="../base.css">
</head>
<body>
 <div class="container">
    <h1>Alterar Produto</h1>
    <c:if test="${not empty errors}">
            <div class="alert alert-danger">
                <c:forEach var="error" items="${errors}">
                    ${error.category} - ${error.message}<br />
                </c:forEach>
            </div>
        </c:if>
<form action="<c:url value="/produto/${produto.id}"/>" method="post">

<%--     <input type="hidden" name="produto.id" 
      value="${produto.id }" />  --%>

    <label for="nome">Nome:</label>
    <input id="nome" type="text" name="produto.nome" class="form-control"
      value="${produto.nome}"/>

    <label for="valor">Valor:</label>
    <input type="text" id="valor" name="produto.valor" class="form-control" value="${produto.valor}"/>



    <label for="quantidade">Quantidade:</label>
    <input id="quantidade" type="text" name="produto.quantidade" class="form-control"
      value="${produto.quantidade}"/>

    <button type="submit" class="btn btn-primary" name="_method" value="PUT">Enviar</button>

</form>
</div>
</body>
</html>