Dúvida na Apostila Caelum FJ-21[RESOLVIDO]

6 respostas
S

O erro:

type Exception report

message

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

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /lista-contato-elegante.jsp at line 8

5:
6:


7:
8:
9:

10:
11:

Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:521)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:430)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

org.apache.jasper.el.JspELException: /lista-contato-elegante.jsp(8,2) '${dao.lista}' Error reading 'lista' on type br.com.caelum.dao.ContatoDAO
org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:107)
org.apache.jsp.lista_002dcontato_002delegante_jsp._jspx_meth_c_005fforEach_005f0(lista_002dcontato_002delegante_jsp.java:104)
org.apache.jsp.lista_002dcontato_002delegante_jsp._jspService(lista_002dcontato_002delegante_jsp.java:74)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

java.lang.NullPointerException
br.com.caelum.dao.ContatoDAO.getLista(ContatoDAO.java:42)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
javax.el.BeanELResolver.getValue(BeanELResolver.java:83)
javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
org.apache.el.parser.AstValue.getValue(AstValue.java:123)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101)
org.apache.jsp.lista_002dcontato_002delegante_jsp._jspx_meth_c_005fforEach_005f0(lista_002dcontato_002delegante_jsp.java:104)
org.apache.jsp.lista_002dcontato_002delegante_jsp._jspService(lista_002dcontato_002delegante_jsp.java:74)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.33 logs.

lista-contato-elegante.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<body>
	<!-- cria a lista -->
	<jsp:useBean id="dao" class="br.com.caelum.dao.ContatoDAO" />
	<table>
		<!-- for -->
		<c:forEach var="contato" items="${dao.lista}">
			<tr>
				<td>${contato.nome}</td>
				<td>${contato.email}</td>
				<td>${contato.endereco}</td>
			</tr>
		</c:forEach>
	</table>
</body>   
</html>
ContatoDAO.java
package br.com.caelum.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import br.com.caelum.jdbc.ConnectionFactory;

public class ContatoDAO {
	private Connection connection;

	public ContatoDAO() {
		new ConnectionFactory().getConnection();
	}

	public void adiciona(Contato contato) throws SQLException {
		ConnectionFactory c = new ConnectionFactory();
		Connection conn = c.getConnection();
		Statement s = conn.createStatement();
		s.executeQuery("use FJ21;");
		s.executeQuery("insert into contatos (nome,email,endereco,dataNascimento) values ("
				+ contato.getNome()
				+ ", "
				+ contato.getEmail()
				+ ", "
				+ contato.getEndereco()
				+ ", "
				+ new Date(contato.getDataNascimento().getTimeInMillis())
				+ ");");
	}

	public List<Contato> getLista() {
		try {
			List<Contato> contatos = new ArrayList<Contato>();
			PreparedStatement stmt = connection
					.prepareStatement("select * from contatos");
			ResultSet rs = stmt.executeQuery();

			while (rs.next()) {
				// criando o objeto Contato
				Contato contato = new Contato();
				contato.setId(rs.getLong("id"));
				contato.setNome(rs.getString("nome"));
				contato.setEmail(rs.getString("email"));
				contato.setEndereco(rs.getString("endereco"));

				// montando a data através do Calendar
				Calendar data = Calendar.getInstance();
				data.setTime(rs.getDate("dataNascimento"));
				contato.setDataNascimento(data);

				// adicionando o objeto à lista
				contatos.add(contato);
			}
			rs.close();
			stmt.close();
			return contatos;
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
}

6 Respostas

A

Acho que dentro do método getLista() faltou instanciar o objeto connection …

[]'s

S

alex.brito:
Acho que dentro do método getLista() faltou instanciar o objeto connection …

[]'s

Ele não está deixando eu instancia-lo.

Ele fala: “Cannot instantiate the type Connection”.

A

Seu método adciona funciona ? Tenta obter a conexão igual ao método adiciona (ConnectionFactory).

Uma observação:

no seu construtor ContatoDAO() acho que deveria ficar assim:

public ContatoDAO() {  
      connection =  new ConnectionFactory().getConnection();  
 }

Tenta ai …

[]'s

A

Testa o esquema do construtor primeiro, assim, você não precisaria criar um novo objeto connection no getLista …

S

Aeee agora sim funcionou. Arrumei lá o construtor e deu certo. Obrigado pela ajuda.

A

Opa, beleza então …

Bom, o pessoal aqui do forum aconselha a colocar um " [RESOLVIDO] " no título do tópico quando você encontra uma solução satisfatória, fica aqui a sugestão.

Boa sorte nos estudos …

[]'s

Criado 13 de outubro de 2011
Ultima resposta 13 de out. de 2011
Respostas 6
Participantes 2
${contato.nome}${contato.email}