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>