Ir ao conteúdo
  • Cadastre-se

Eduardo Benevides

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

0
  1. Olá pessoal, estou revisando a apostila da caelum FJ21 e estou com um problema que não consigo resolver. Eu tenho uma classse DAO com os metodos para adicionar, alterar, etc.: package br.com.caelum.agenda.dao; import java.sql.Connection; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import br.com.caelum.agenda.ConnectionFactory; import br.com.caelum.agenda.modelo.Contato; public class ContatoDao { private Connection connection; public ContatoDao() { try { this.connection = new ConnectionFactory().getConnection(); } catch (SQLException e) { throw new RuntimeException(e); } } public void adiciona(Contato contato) { try { String sql = "insert into contatos (nome, email, endereco, dataNascimento) values (?,?,?,?)"; PreparedStatement stmt = connection.prepareStatement(sql); stmt.setString(1, contato.getNome()); stmt.setString(2, contato.getEmail()); stmt.setString(3, contato.getEndereco()); stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis())); stmt.execute(); stmt.close(); } catch (SQLException e) { throw new RuntimeException(e); } } public List<Contato> getLista() { try { List<Contato> contatos = new ArrayList<Contato>(); PreparedStatement stmt = this.connection.prepareStatement("select * from contatos"); ResultSet rs = stmt.executeQuery(); while(rs.next()) { Contato contato = new Contato(); //popula o objeto contato contato.setId(rs.getLong("id")); contato.setNome(rs.getString("nome")); contato.setEmail(rs.getString("email")); contato.setEndereco(rs.getString("endereco")); //popula a data de nascimento do contato, fazendo a conversao Calendar data = Calendar.getInstance(); data.setTime(rs.getDate("dataNascimento")); contato.setDataNascimento(data); //adiciona o contato na lista contatos.add(contato); } rs.close(); stmt.close(); return contatos; } catch (SQLException e) { throw new RuntimeException(e); } } public void exclui(Contato contato) { String sql = "delete from contatos where id=?"; try { PreparedStatement stmt = this.connection.prepareStatement(sql); stmt.setLong(1, contato.getId()); stmt.execute(); } catch (SQLException e) { throw new RuntimeException(e); } } public void atualiza(Contato contato) { String sql = "update contatos set id=?, nome = ?, email = ?, endereco = ?, dataNascimento = ? where id = ?"; try { PreparedStatement stmt = this.connection.prepareStatement(sql); stmt.setString(1, contato.getNome()); stmt.setString(2, contato.getEmail()); stmt.setString(3, contato.getEndereco()); stmt.setDate(4, new java.sql.Date(contato.getDataNascimento().getTimeInMillis())); stmt.setLong(5, contato.getId()); stmt.execute(); } catch (SQLException e) { throw new RuntimeException(e); } } } tenho a classe responsavél pela alteração: package br.com.caelum.mvc.logica; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; 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 AlterarContatoLinkLogica implements Logica{ @Override public void executa(HttpServletRequest request, HttpServletResponse response) throws Exception{ Contato contato = new Contato(); Calendar dataNascimento =null; long id = Long.parseLong(request.getParameter("id")); contato.setId(id); contato.setNome(request.getParameter("nome")); contato.setEndereco(request.getParameter("endereco")); contato.setEmail(request.getParameter("email")); String dataEmTexto = request.getParameter("dataNascimento"); Date date = new SimpleDateFormat("dd/MM/yyyy").parse(dataEmTexto); dataNascimento = Calendar.getInstance(); dataNascimento.setTime(date); contato.setDataNascimento(dataNascimento); ContatoDao dao = new ContatoDao(); dao.atualiza(contato); RequestDispatcher rd = request.getRequestDispatcher("/altera-contato-mvc.jsp"); rd.forward(request, response); System.out.println("Manda para um pagina diferente ... "+contato.getNome()); } protected void doPost(HttpServletRequest request, HttpServletRequest response) throws ServletException,IOException{ } } A página jsp que deverá ser aberta: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <%@ taglib tagdir="/WEB-INF/tags" prefix="caelum" %> <c:import url="cabecalho.jsp"/> Formulário para alteração de contatos:<br/> <form action="mvc" method="POST"> Id: <input type="text" name="id" value="${param.id}" readonly/><br/> Nome: <input type="text" name="nome" value="${param.nome}"/><br/> E-mail: <input type="text" name="email" value="${param.email}"/><br/> Endereço: <input type="text" name="endereco" value="${param.endereco}"/><br/> <fmt:formatDate value="${param.dataNascimento.time}" pattern="dd/MM/yyyy" var="dataFormatada"></fmt:formatDate> Data de Nascimento: <input type="text" name="dataNascimento" value="${dataFormatada}" /> <input type="hidden" name="logica" value="AlterarContatoLinkLogic"/> <input type="submit" value="Enviar"/> </form> <c:import url="rodape.jsp" /> E uma controladora: package br.com.caelum.mvc.servlet; import java.io.IOException; 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.caelum.mvc.logica.Logica; @WebServlet("/mvc") public class ControllerServlet extends HttpServlet{ @Override protected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { String parametro=request.getParameter("logica"); System.out.println(parametro); String nomeDaClasse="br.com.caelum.mvc.logica." + parametro; try { Class classe = Class.forName(nomeDaClasse); Logica logica = (Logica) classe.newInstance(); logica.executa(request, response); }catch(Exception e) { throw new ServletException("A lógica de negocios causou uma exceção",e); } } } Quando clico no icone de alteração a página de alteração não abre e é gerado o erro: jun 05, 2018 4:26:09 PM org.apache.catalina.core.StandardWrapperValve invoke GRAVE: Servlet.service() for servlet [br.com.caelum.mvc.servlet.ControllerServlet] in context with path [/fj21-agenda] threw exception [A lógica de negocios causou uma exceção] with root cause java.lang.NullPointerException at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1439) at java.text.DateFormat.parse(DateFormat.java:364) at br.com.caelum.mvc.logica.AlterarContatoLinkLogica.executa(AlterarContatoLinkLogica.java:29) at br.com.caelum.mvc.servlet.ControllerServlet.service(ControllerServlet.java:25) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:651) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:407) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1376) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...