CRUD - Não edita

10 respostas
java
Thalya_amorim

O CRUD está funcionando, menos na hora de editar. o que eu faço para editar?

package br.com.projeto.controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import br.com.projeto.model.Cliente;
import br.com.projeto.service.ServiceCliente;

@WebServlet("/editaCliente")
public class EditarClienteServlet extends HttpServlet {

/**
 *  
 */
private static final long serialVersionUID = 1L;
private ServiceCliente serviceCliente;

@Override
public void init() throws ServletException {
	this.serviceCliente = new ServiceCliente();
}

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

	Long id = Long.parseLong(req.getParameter("id"));
	
	Cliente cliente = new Cliente();
	
	  if(id.toString() == null) { 
		  this.serviceCliente.save(cliente); 
		  } 
	  else {
		  cliente.setId(id); this.serviceCliente.update(cliente); 
		  }
	 
	Cliente edita = this.serviceCliente.getOne(id);

	RequestDispatcher disp = req.getRequestDispatcher("index.jsp");
	req.setAttribute("cliente", edita);
	disp.forward(req, resp);

}

}

Class repository

public class RepositoryCliente {

private static EntityManagerFactory factory;
static {
	factory = Persistence.createEntityManagerFactory("clientes");
}

private EntityManager em;

public Cliente save(Cliente cliente) {
	this.em = factory.createEntityManager(); // conexao com o banco
	em.getTransaction().begin(); 
	em.persist(cliente);
	em.getTransaction().commit();
	em.close();
	return cliente;
}

@SuppressWarnings("unchecked")
public List<Cliente> findAll() {
	this.em = factory.createEntityManager();
	em.getTransaction().begin();
	List<Cliente> clientes = em.createQuery("select u from Cliente u").getResultList();
	em.close();
	return clientes;
}

public void remove(Long id) {
	this.em = factory.createEntityManager();
	em.getTransaction().begin();
	Cliente remove = em.find(Cliente.class, id);
	em.remove(remove);
	em.getTransaction().commit();
	em.close();
}
public void update(Cliente cliente) {
	this.em = factory.createEntityManager();
	em.getTransaction().begin();
	em.merge(cliente);
	em.getTransaction().commit();
	em.close();
}

public Cliente getOne(Long id) {
	this.em = factory.createEntityManager();
	em.getTransaction().begin();
	Cliente find = em.find(Cliente.class, id);
	em.close();
	return find;
}

}

10 Respostas

darlan_machado

Este “não funciona” seria não altera as informações no banco de dados?
Alguma exceção?
Está seguindo algum tutorial, livro, apostila?

F

veja se o cliente recebido tem o id setado, coloque o system.out e print o id.

ou melhor percebi que você tem um método getOne, poderia passar o cliente para esse método para ele verificar se o cliente ja existe na base so então realizar o update.

public void update(Cliente cliente){

Cliente obj  = this.getOne(cliente.getCodigo());

//caso conseguiu buscar o cliente e não houve exception

//agora atualize

em.merge(cliente);

}
lucas.sampaio

Está jogando recuperando os dados na view?

Por exemplo:

<form>
     <input name="id" value="${cliente.id}">
 </form>
Thalya_amorim

sim, estou usando

Thalya_amorim

não faz a alteração.
Quando desse o click no editar, os dados deveriam ir pro campos de cadastro(nome e email) e fazer a alteração.
O que ta acontecendo, não está voltando pro campos, e quando listar o que foi mencionado para alterar fica branco na Lista de clientes cadastrado e no banco de dados.

Pela apostilha caleum java web, mas não seguindo os exercícios que tem la.

lucas.sampaio

Dá algum erro?

Olha no console do browser se o id está realmente sendo setado no value do input id.

Thalya_amorim

o erro esta na minha condição If e else
quando faço o debug, a condição nao recebe o id.

essa logica q tentei fazer, creio q esteva errada

lucas.sampaio

Faz o seguinte

Long id = Long.valueOf((request.getParameter("id") != null && !request.getParameter("id").isEmpty()) ? request.getParameter("id"): "0");

Na condição if faça a comparação

if(id == 0){
// Novo
} else {
// atualiza
}

Porque? Comparação de String ou objetos no Java é com o método equals() e você tá comparando um Long que é um objecto.

MuPezzuol

Thalya você precisa testar os métodos de comparação (== e/ou equals()) nessa condição if.

if(id.equals(0)) { 
	  //Realiza o cadastro, pois não veio nenhum ID
	  } 
  else {
	  //Atualiza
	  }
MuPezzuol

Comparação de String nós podemos usar == ou equals().

== - Compara referência (dependendo pode ser acionado o Pool de String, retornando TRUE)
equals() - Compara conteúdo

Criado 24 de abril de 2018
Ultima resposta 25 de abr. de 2018
Respostas 10
Participantes 5