Problemas com exercicio da apostila FJ21 execicio 9.9.2

Bom dia galera
Estou fazendo este exercício da apostila fj21:
Coloque um link na sua lista-contatos-elegante.jsp que abre a pagina teste-altera-mvc.jsp passando o id do contato que vc quer alterar. Deixe o campo id visível no form mas não alterável. Não esqueça de passar o campo id pela requisição. Faça com que os campos do form estejam populados com os dados do contato a ser editado.

bem, inseri o link na pagina:

<td><a href="mvc?logica=AlteraContatoLinkLogic&id=${contato.id}">Alterar</a></td>  

criei esta logica para enviar os dados a serem alterados:

[code]package br.com.caelum.mvc.logica;

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

import br.com.caelum.agenda.dao.ContatoDao;
import br.com.caelum.agenda.modelo.Contato;

public class AlteraContatoLinkLogic implements Logica{

public void executa(HttpServletRequest req, HttpServletResponse res) throws Exception {  
    Long id = Long.parseLong(req.getParameter("id"));  
    ContatoDao contatoDao = new ContatoDao();  
    Contato contato = contatoDao.pesquisarContato(id);
    req.setAttribute("nome",contato.getNome());  
    req.setAttribute("email",contato.getEmail());  
    req.setAttribute("endereco",contato.getEndereco());  
    req.setAttribute("nascimento",contato.getDataNascimento());  

    RequestDispatcher rd = req.getRequestDispatcher("testa-altera-mvc.jsp");  
    rd.forward(req, res);  
}  

} [/code]

e criei a pesquisa no contatodao:

[code]public Contato pesquisarContato(Long id){
Contato contato = new Contato();
try{
PreparedStatement stmt = this.connection.prepareStatement(“select * contato where id=?”);
ResultSet rs = stmt.executeQuery();
stmt.setLong(1,contato.getId());
contato.setId(rs.getLong(“id”));
contato.setNome(rs.getString(“nome”));
contato.setEmail(rs.getString(“email”));
contato.setEndereco(rs.getString(“endereco”));
rs.close();
stmt.close();
}catch(SQLException e){
throw new RuntimeException(e);
}

    return contato;  
}  [/code]

Como eu resolvo isso ??[size=18] [/size]
Mas ao executar aparece esse erro :

java.lang.NumberFormatException: For input string: “”
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
java.lang.Long.parseLong(Long.java:453)
java.lang.Long.parseLong(Long.java:483)
br.com.caelum.mvc.logica.AlteraContatoLinkLogic.executa(AlteraContatoLinkLogic.java:13)
br.com.caelum.mvc.servlet.ControllerServlet.service(ControllerServlet.java:26)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Seu método pesquisar contato parece estar errado. Você está passando o id do contato (“contato.getId()”, que está nulo) ao invés do parâmetro do método, além de estar passando o parâmetro depois de chamar o “executeQuery()”.

A correção seria algo como:

[code]public Contato pesquisarContato(Long id){
Contato contato = new Contato();
try{
PreparedStatement stmt = this.connection.prepareStatement(“select * contato where id=?”);
stmt.setLong(1, id); // usa o parametro do metodo
ResultSet rs = stmt.executeQuery(); // executa a query depois de passar o parametro
contato.setId(rs.getLong(“id”));
contato.setNome(rs.getString(“nome”));
contato.setEmail(rs.getString(“email”));
contato.setEndereco(rs.getString(“endereco”));
rs.close();
stmt.close();
}catch(SQLException e){
throw new RuntimeException(e);
}

    return contato;  
}  [/code]

Abraço.

Ola TerraSkilll

Fiz as alterações mas ainda esta com erro, ao tentar executar apareceu essa mensagem de erro:

type Exception report

message A logica de negocios causou uma exceção

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: A logica de negocios causou uma exceção
br.com.caelum.mvc.servlet.ControllerServlet.service(ControllerServlet.java:29)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

java.lang.NumberFormatException: For input string: “”
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
java.lang.Long.parseLong(Long.java:453)
java.lang.Long.parseLong(Long.java:483)
br.com.caelum.mvc.logica.AlteraContatoLinkLogic.executa(AlteraContatoLinkLogic.java:13)
br.com.caelum.mvc.servlet.ControllerServlet.service(ControllerServlet.java:26)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Nao estou entendendo nesse execicio como é passado o id para ser modificado clicando no link e queria saber tb como debugar isso.