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

Não consigo excluir Objeto da minha Tabela JSP

Tenho uma tabela, e quando tento excluir um linda da minha tabela eu não consigo.

OBS: No Caso, eu consigo recuperar minha URL, só que não consigo pegar o ID do Objeto. http://localhost:8080/fj21-aprendendo/mvc?logica=SelecionaContatoLogica&codigo=

Meu Erro:

A Logica de negocio causou uma exceçãojava.lang.NumberFormatException: null
<%@page import="DAO.ContatoDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Listando Contato</title>
</head>
<body>

    <c:import url="/WEB-INF/template/cabecalho.jsp" />
    <br/><br/>

    <table border="1">
        <tr>
            <th>Codigo</th>
            <th>Nome</th>
            <th>Endereco</th>
            <th>email</th>
            <th>Data</th>
            <th>Remover</th>
            <th> Alterar </th>
        </tr>
        <c:forEach var="contato" items="${contatos}" varStatus="id">
            <tr bgcolor="${id.count % 2 == 0 ? 'aaeeff' : 'ffffff'}">
                <td style="text-align:center;"><a href="mvc?logica=SelecionaContatoLogica&codigo=${contato.id}">${id.count}</a> </td>
                <td>${contato.nome}</td>
                <td>${contato.endereco}</td>
                <td>
                    <c:choose>
                        <c:when test="${not empty contato.email}">
                             <a href="mailto:${contato.email}"> ${contato.email} </a>    
                        </c:when>
                        <c:otherwise>
                            Email não informado
                        </c:otherwise>
                    </c:choose>
                </td>
                <td>
                    <fmt:formatDate value="${contato.dataNascimento.time}" pattern="dd/MM/yyyy" />
                </td>
                <td> 
                    <a href="mvc?logica=RemoveContatoLogica&codigo=${contato.id}">Remover</a>
                </td>
                <td>
                    <a href="mvc?logica=SelecionaContatoLogica&codigo=${contato.id}">Alterar </a>
                </td>
            </tr>
        </c:forEach>
    </table>

    <c:import url="/WEB-INF/template/rodape.jsp" />
</body>
</html>

Minha Logica

public class RemoveContatoLogica implements Logica {

    @Override
    public String executa(HttpServletRequest request, HttpServletResponse response) throws Exception {

        int codigo = Integer.parseInt(request.getParameter("nome"));
        Contato c = new Contato();
        c.setId(codigo);
        new ContatoDAO().excluir(c);

        return "mvc?logica=ListaContatoLogica";
    }

}

Interface

public interface Logica {

    public String executa(HttpServletRequest request, HttpServletResponse response) throws Exception;
}

Controller

@WebServlet("/mvc")
public class ControllerServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String pegaParametro = "aprendendo.Servlet." + request.getParameter("logica");

        try{
            Class classe = Class.forName(pegaParametro); //Pega a Classe

            Logica  logica = (Logica) classe.newInstance(); //Cria uma Instancia dela que foi implementada pela Logica.

            String pagina = logica.executa(request, response); //Executa ela

            request.getRequestDispatcher(pagina).forward(request, response); //Encaminha a Página
        }catch (Exception e) {
            System.out.println("A Logica de negocio causou uma exceção" + e);
        }
    }

Meu DAO

public void excluir(Contato contato) {

String sql = "delete from contato where id = ?"; try (PreparedStatement stmt = connection.prepareStatement(sql)) { stmt.setInt(1, contato.getId()); stmt.execute(); } catch (SQLException e) { throw new RuntimeException(e); } }

4 respostas

Bom, olhando o seu código parece que o contato realmente não está vindo com o id preenchido. Tem como verificar? talvez o método do dao que carrega a lista não esteja setando o id.

Obrigado Pela ajuda Alberto!

Quando eu clico no link para excluir, minha URL não consegue recuperar o ID, eu preciso informar manualmente a URL no LINK para excluir.

http://localhost:8080/fj21-aprendendo/mvc?logica=RemoveContatoLogica&codigo=

Aparece um log no Console:

For input string: ""

Segue meu DAO

public void excluir(Contato contato) {

        String sql = "delete from contato where id = ?";
        try (PreparedStatement stmt = connection.prepareStatement(sql)) {
            stmt.setInt(1, contato.getId());
            stmt.execute();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
    }
solução!

Opa, entendi. Só que você deve ter um método no seu dao que retorna uma lista de contatos e essa mesma lista é utilizada na jsp. Acho que nesse método vocÊ não ta setando o id.

Opa! Era o que você falou realmente. No meu método listar, não recurei o ID.

Obrigado mais uma vez...