2
respostas

Atualização de dados usando um formulario

Estou tentando a um tempo e ainda não consegui, queria pegar os dados de um cliente do campo lista ou busca e passar para um formulario para fazer a edição do mesmo, ja pesquisei e nao achei nada. busca.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:import url="/WEB-INF/jsp/header.jsp"/>
<div id="tamanho_lista">
<a class="btn btn-secondary btn-lg" href="${linkTo[ClienteController].form()}">Novo cliente</a>

<table class="table table-hover">
    <thead>
        <tr>
            <th>NOME</th>
            <th>CPF</th>
            <th>RG</th>
            <th>EMAIL</th>
            <th>RUA</th>
            <th>BAIRRO</th>
            <th>CEP</th>
            <th>CIDADE</th>
            <th>Editar</th>
            <th>Excluir</th>
        </tr>
    </thead>
    <tbody>
        <c:forEach items="${clienteList}" var="cliente">
            <tr>
                <td>${cliente.nome}</td>
                <td>${cliente.cpf}</td>
                <td>${cliente.rg}</td>
                <td>${cliente.email}</td>
                <td>${cliente.rua}</td>
                <td>${cliente.bairro}</td>
                <td>${cliente.cep}</td>
                <td>${cliente.email}</td>
                <td>
                    <form action="<c:url  value='/cliente/form_att'/>" method="post">
                        <input type="hidden" name="_method" value="PUT">
                        <input type="hidden" name="cliente.cpf" value="${cliente.cpf}">
                        <input type="submit" value="Editar">
                    </form>
                </td>
                <td>
                    <form action="<c:url  value='/cliente/remove'/>" method="post">
                        <input type="hidden" name="_method" value="DELETE">
                        <input type="hidden" name="cliente.cpf" value="${cliente.cpf}">
                        <input type="submit" value="Excluir">
                    </form>
                </td>
            </tr>
        </c:forEach>
    </tbody>
</table>
</div>
<c:import url="/WEB-INF/jsp/footer.jsp"/>

clientedao

package br.com.wvs.dao;


import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import br.com.wvs.model.Cliente;

@RequestScoped
public class ClienteDao {


    private EntityManager manager;



    @Inject
    public ClienteDao(EntityManager manager ) {
        this.manager = manager;
    }

    public ClienteDao() {};

    public void adiciona (Cliente cliente) {
        manager.getTransaction().begin();
        manager.persist(cliente);
        manager.getTransaction().commit();
    }


    public List<Cliente> lista(){
        TypedQuery<Cliente> query = manager.createQuery("Select r from Cliente r", Cliente.class);
        return query.getResultList();
    }

    public List<Cliente> busca(String nome) {    
        manager.getTransaction().begin();

        CriteriaBuilder criteria = manager.getCriteriaBuilder();
        CriteriaQuery<Cliente> query = criteria.createQuery(Cliente.class);
        Root<Cliente> root = query.from(Cliente.class);

        Path<String> nmPath = root.<String>get("nome");        

            Predicate nomeIgual = criteria.like(nmPath,"%" + nome + "%");
            query.where(nomeIgual);

        TypedQuery<Cliente> tQuery = manager.createQuery(query);
        manager.getTransaction().commit();

        return tQuery.getResultList();


    }


    public Cliente find(Cliente cliente) {
        return manager.find(Cliente.class, cliente.getCpf());
    }

    public void remove(Cliente cliente) {
        manager.getTransaction().begin();
        cliente = find(cliente);
        manager.remove(cliente);
        manager.getTransaction().commit();

    }


    public void atualiza(Cliente cliente) {
        manager.getTransaction().begin();
        cliente = find(cliente);
        manager.merge(cliente);
        manager.flush();
        manager.getTransaction().commit();

    }



}
2 respostas

Continuação

clientecontroller

package br.com.wvs.controller;

import java.util.List;

import javax.inject.Inject;
import javax.validation.Valid;

import br.com.caelum.vraptor.Controller;
import br.com.caelum.vraptor.Delete;
import br.com.caelum.vraptor.Put;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.IncludeParameters;
import br.com.caelum.vraptor.validator.Validator;
import br.com.wvs.dao.ClienteDao;
import br.com.wvs.model.Cliente;

@Controller
public class ClienteController {

    private ClienteDao clienteDao;
    private Result result;
    private Validator validator;

    @Inject
    public ClienteController(ClienteDao clienteDao, Result result, Validator validator) {
        this.clienteDao = clienteDao;
        this.result = result;
        this.validator = validator;
    }

    public ClienteController() {};

    public void form() {};
    public void form_att() {};


    @IncludeParameters
    public void adiciona (@Valid Cliente cliente) {
        validator.onErrorRedirectTo(this).form();
        clienteDao.adiciona(cliente);
        result.redirectTo(this).lista();
    }


    @Put("/cliente/atualiza/{cliente.cpf}")
    public void atualiza(Cliente cliente) {
        cliente = clienteDao.find(cliente);
        clienteDao.atualiza(cliente);
        result.redirectTo(this).lista();
    }




    public void lista() {
        List<Cliente> clientes = clienteDao.lista();
        result.include("clientes", clientes);
    };

    @Delete
    public void remove (Cliente cliente) {
        clienteDao.remove(cliente);
        result.redirectTo(this).lista();
    }


    public List<Cliente> busca(String nome){
        result.include("nome", nome);
        return clienteDao.busca(nome);
    }

}

formulario para receber e atualizar os dados

<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib tagdir = "/WEB-INF/tags" prefix="t" %>

<c:import url="/WEB-INF/jsp/header.jsp"></c:import>

<div id="tamanho_form">

<c:forEach items="${clienteList}" var="cliente">

</c:forEach>

<form action="<c:url value="/cliente/atualiza/${cliente.cpf}"/>" method="POST" id="cad_cliente">

    <div class="form-row">
    <div class="form-group col-md-6">
    <label for="nome">NOME:</label>
    <input type="text" name="cliente.nome" id="nome" class="form-control" value="${cliente.nome}"/>
     <%--<t:validationMessage name="cliente.nome"></t:validationMessage>--%>
    </div>

    <div class="form-group col-md-6">
    <label for="cpf">CPF:</label>
    <input type="text" name="cliente.cpf" id="cpf" class="form-control" value="${cliente.cpf}" placeholder="000.000.000-00"/>
     <%--<t:validationMessage name="cliente.cpf"></t:validationMessage>--%>
    </div>

    <div class="form-group col-md-6">
    <label for="email">E-MAIL:</label>
    <input type="text" name="cliente.email" id="email" class="form-control" value="${cliente.email}"/>
     <%--<t:validationMessage name="cliente.email"></t:validationMessage>--%>
    </div>

    <div class="form-group col-md-6">
    <label for="rg">RG:</label>
    <input type="text" name="cliente.rg" id="rg" class="form-control" value="${cliente.rg}" placeholder="00.000.000-0"/>
     <%--<t:validationMessage name="cliente.rg"></t:validationMessage>--%>
    </div>

    <div class="form-group col-md-6">
    <label for="rua">RUA:</label>
    <input type="text" name="cliente.rua" id="rua" class="form-control" value="${cliente.rua}"/>
     <%--<t:validationMessage name="cliente.rua"></t:validationMessage>--%>
    </div>

    <div class="form-group col-md-6">
    <label for="bairro">BAIRRO:</label>
    <input type="text" name="cliente.bairro" id="bairro" class="form-control" value="${cliente.bairro}"/>
     <%--<t:validationMessage name="cliente.bairro"></t:validationMessage>--%>
    </div>

    <div class="form-group col-md-6">
    <label for="cep">CEP:</label>
    <input type="text" name="cliente.cep" id="cep" class="form-control" value="${cliente.cep}" placeholder="00000-000"/>
     <%--<t:validationMessage name="cliente.cep"></t:validationMessage>--%>
    </div>

    <div class="form-group col-md-6">
    <label for="cidade">CIDADE:</label>
    <input type="text" name="cliente.cidade" id="cidade" class="form-control" value="${cliente.cidade}"/>
     <%--<t:validationMessage name="cliente.cidade"></t:validationMessage>--%>
    </div>    

    <input type="submit" value="Atualizar" class="btn btn-dark"/>
    </div>


</form>

</div>


<c:import url="/WEB-INF/jsp/footer.jsp"></c:import>

Olá Daniel!

Temos uma apostila de VRaptor que trata do assunto de edição de um objeto.

Veja se te ajuda:

https://www.caelum.com.br/apostila-vraptor-hibernate/cadastrando-produtos/#5-6-outras-operacoes-com-produto