O erro:
[quote]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: <jsp:useBean id=“dao” class=“br.com.caelum.dao.ContatoDAO” />
6:
7:
8: <c:forEach var=“contato” items="${dao.lista}">
9:
10: ${contato.nome} |
11: ${contato.email} |
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.
[/quote]
lista-contato-elegante.jsp
[code]<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
${contato.nome} |
${contato.email} |
${contato.endereco} |
[/code]
ContatoDAO.java
[code]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);
}
}
}[/code]
Acho que dentro do método getLista() faltou instanciar o objeto connection …
[]'s
[quote=alex.brito]Acho que dentro do método getLista() faltou instanciar o objeto connection …
[]'s[/quote]
Ele não está deixando eu instancia-lo.
Ele fala: “Cannot instantiate the type Connection”.
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
Testa o esquema do construtor primeiro, assim, você não precisaria criar um novo objeto connection no getLista …
Aeee agora sim funcionou. Arrumei lá o construtor e deu certo. Obrigado pela ajuda.
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