[RESOLVIDO]Apostila Caelum fj-21 exerc 9.11 Desafio

Bom dia, estou fazendo um exercício da apostila FJ-21 da celum, onde tenho que criar uma única logica q substitua duas já existentes(uma que altera o contato, e outra que adiciona um novo contato), as únicas coisas que diferem as duas é um getParameter(“id”), e um setId.
Tentei fazer um if que iria verificar a minha id, porém só da certo para o método de alterar o contato porém quando tento adicionar um novo contato ( não é necessário colocar o id), é gerado um erro de java.lang.NumberFormatException: null.
Tentei usar um if de acordo com o URL da página que enviou a requicisão , porém também não deu certo ( a url que é sempre a mesma)

Seguem as classes:

ListaContatosLogic> classe que vai listar meus contatos

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.diebold.dao.ContatoDao;
import com.diebold.modelo.Contatos;

public class ListaContatosLogic implements Logica{
public String executa(HttpServletRequest req, HttpServletResponse res)  throws Exception {

 List<Contatos> contatos = new ContatoDao().getLista(); 

 req.setAttribute("contatos", contatos);

   return "/WEB-INF/jsp/lista-contatos.jsp";
  }
}

Classe para adicionar e alterar contatos

import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.diebold.dao.ContatoDao;
import com.diebold.modelo.Contatos;

public class AdicionaAlteraContatoLogic implements Logica {
   public String executa(HttpServletRequest req, HttpServletResponse res) throws Exception {
    
    Long id = Long.parseLong(req.getParameter("id"));            
    PrintWriter out = res.getWriter();
    String nome = req.getParameter("nome");
    String endereco = req.getParameter("endereco");
    String email = req.getParameter("email");
    String dataEmTexto = req.getParameter("dataNascimento");
    Calendar dataNascimento = null;
    try {
    Date date = new SimpleDateFormat("dd/MM/yy").parse(dataEmTexto);
    dataNascimento = Calendar.getInstance();
    dataNascimento.setTime(date);
    } catch (ParseException e) {
    out.println("Erro de conversão da data");
    }
    Contatos contato = new Contatos();    
    contato.setNome(nome); 
    contato.setEndereço(endereco);
    contato.setEmail(email); 
    contato.setDataNascimento(dataNascimento); 
    ContatoDao dao = new ContatoDao();
     if (id != null ) {
     contato.setId(id);
     dao.altera(contato);
      }else{
      dao.adiciona(contato);
      }
      return "mvc?logica=ListaContatosLogic";
      }
}

Logica para chamar os formulários corretos: Altera

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AlteraFormularioLogic implements Logica{
   public String executa(HttpServletRequest req, HttpServletResponse res)throws Exception {
      return "/WEB-INF/jsp/altera-contato.jsp";
     }
 }

Adiciona

 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
  public class AdicionaFormularioLogic implements Logica{
   public String executa(HttpServletRequest req, HttpServletResponse res)
       throws Exception {
           return "adiciona-contato.jsp";
      } 
  }

Agora segue o jsp da lista de contato

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://displaytag.sf.net" prefix="display"%>



 <c:import url="cabecalho.jsp"></c:import>

  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link href="css/displaytag.css" rel="stylesheet">
<title>Contatos</title>
</head>
<body>
   <display:table name="contatos" sort="list" pagesize="10"
     class="displaytag.css">
         <display:column property="nome" title="Nome" /> 
         <display:column property="email" title="E-mail" />
         <display:column property="endereço" title="Endereço" />
         <display:column property="dataNascimento.time" 
              title="Data de Nascimento" format="{0,date,dd/MM/yyyy}" /> 
     </display:table> 
     <c:forEach var="contato" items="${contatos}">
         <a href="mvc?logica=RemoveContatoLogic&id=${contato.id}">Remover</a>    
         <a href="mvc?logica=AlteraFormularioLogic&id=${contato.id}">Alterar Contato</a>     
        </c:forEach> 
     <a href="mvc?logica=AdicionaFormularioLogic"> Adicionar Contato</a>
     <c:import url="rodape.jsp"></c:import>
 </body>
 </html>

jsp do altera contato

  <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
   pageEncoding="ISO-8859-1"%>
   <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
   <%@ taglib tagdir="/WEB-INF/tags" prefix="diebold" %>
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<c:import url="cabecalho.jsp"></c:import>
<link href= "css/jquery-ui.css" rel="stylesheet">
<script src="js/jquery.js"></script>
<script src="js/jquery-ui.js"></script>
<title>Alterar contato</title> 
</head>
<body>
<form action="mvc?logica=AdicionaAlteraContatoLogic" method="post">   
   Coloque o ID do contato que deseja alterar.<br/>
   Id: <input type="text" name="id" />    <br/>
   Nome: <input type="text" name="nome" /><br />
   E-mail: <input    type="text" name="email" /><br /> 
   Endereço: <input type="text"name="endereco" /><br />
   Data Nascimento: <diebold:campoData id="dataNascimento"/> <br/>        
   <input type="submit" value="Alterar">       
 </form>    
 <c:import url="rodape.jsp"></c:import>
 </body>
 </html>

jsp do adiciona contato

 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 <%@ taglib tagdir="/WEB-INF/tags" prefix="diebold" %>
 <c:import url="cabecalho.jsp"></c:import>
 <html>
 <head>
 <link href= "css/jquery-ui.css" rel="stylesheet">
 <script src="js/jquery.js"></script>
 <script src="js/jquery-ui.js"></script>
 </head>
 <body>
 <form action="mvc?logica=AdicionaAlteraContatoLogic" method="post">
 Nome: <input type="text" name="nome" /><br />
 E-mail: <input    type="text" name="email" /><br /> 
 Endereço: <input type="text"name="endereco" /><br />
 Data Nascimento: <diebold:campoData id="dataNascimento"/> <br/>
 <input type="submit" value="Gravar">
 </form>
<c:import url="rodape.jsp"></c:import>
</body>
</html>

Provavelmente sua exception é gerada nessa linha
Long id = Long.parseLong(req.getParameter(“id”));
Não adianta vc verificar se isso é != null, a sua exception é na hora do parse, o null ta vindo do getParameter.

Long idNumero = null;
String id = req.getParameter(“id”);
if(id != null){
idNumero = Long.parseLong(id);
}

Ai depois vc verifica o estado do idNumero, pra alternar seus métodos de aciona/consulta.
A exception é clara, ai você só teria que pensar um pouco, não muito, to adicionando um cara, o meu id é autoincrement, e ai ?

Obrigda, agora deu certo, acho q fiquei pensando em outro modo de resolver, que acabei não vendo q havia um modo mais fácil.