[RESOLVIDO] JSTL - Erro ao exibir lista de contatos

9 respostas
bsl.lacerda

Bom dia pessoal!
Estou com um probleminha aqui que é o seguinte:
Quero exibir os dados de uma lista mas está dando o seguinte erro ao chamar a página JSP

type Exception report

message 

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

exception 

javax.servlet.ServletException: Unable to find a value for "getListaDeContatos" in object of class "br.com.caelum.jdbc.dao.ContatoDAO" using operator "."
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
	org.apache.jsp.novoteste_jsp._jspService(novoteste_jsp.java:84)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause 

javax.servlet.jsp.el.ELException: Unable to find a value for "getListaDeContatos" in object of class "br.com.caelum.jdbc.dao.ContatoDAO" using operator "."
	org.apache.commons.el.Logger.logError(Logger.java:481)
	org.apache.commons.el.Logger.logError(Logger.java:498)
	org.apache.commons.el.Logger.logError(Logger.java:611)
	org.apache.commons.el.ArraySuffix.evaluate(ArraySuffix.java:340)
	org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
	org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:263)
	org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:190)
	org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:899)
	org.apache.jsp.novoteste_jsp._jspx_meth_c_out_0(novoteste_jsp.java:99)
	org.apache.jsp.novoteste_jsp._jspService(novoteste_jsp.java:74)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


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

O método “getListaDeContatos()” quando executado em uma aplicação desktop funciona, mas quando importo as classes e instancio o meu DAO utilizando a JSTL está acontecendo este erro.

Minha página JSP está assim:

<%@page pageEncoding="Cp1252" contentType="text/html; charset=Cp1252" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="java.util.*,br.com.caelum.jdbc.*,br.com.caelum.jdbc.dao.*,br.com.caelum.jdbc.modelo.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/>
<title></title>
<jsp:useBean id="dao" class="br.com.caelum.jdbc.dao.ContatoDAO"></jsp:useBean>
</head>
<body>
<c:out value="${dao.getListaDeContatos[0].nome}"/>
</body>
</html>

Alguém poderia me da uma força???

9 Respostas

sandokandias

cara to com o mesmo problema, assim q tiver a resposta me da 1 toke.

bsl.lacerda

OK!

nicholas.bittencourt

Experimente o codigo assim…

<c:out value="${dao.listaDeContatos[0].nome}"/>
bsl.lacerda

Já tentei, mesmo assim não funciona. Valeu pela força.

bsl.lacerda

Quando eu faço referência direta ao objeto ele mostra o endereço do mesmo na memória

<c:out value="${dao}"/>

Resultado:

Alguma sugestão???

nicholas.bittencourt
<c:out value="${dao.listaDeContatos}"/>

Funciona? Se nao, qual o erro??

Cola o codigo do DAO tambem!

bsl.lacerda

Tá aí o código do ContatoDAO

[code]

package br.com.caelum.jdbc.dao;

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

import javax.swing.JOptionPane;

import com.mysql.jdbc.SQLError;

import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.jdbc.modelo.Contato;

public class ContatoDAO {

// a conexão com o banco
private Connection connection;
private String teste;

public ContatoDAO() throws SQLException {
this.connection = ConnectionFactory.getConnection();

}

public Contato adiciona(Contato contato) throws SQLException {

// prepared statement para inserção.
PreparedStatement pstm = this.connection
.prepareStatement("INSERT INTO CONTATOS (ID, NOME, EMAIL, ENDERECO) VALUES (?,?,?,?)");

// seta os valores
pstm.setString(1, contato.getId());
pstm.setString(2, contato.getNome());
pstm.setString(3, contato.getEmail());
pstm.setString(4, contato.getEndereco());

// executa
pstm.execute();
pstm.close();
return contato;

}

// Método que recupera o próximo valor da sequence para gravá-lo no campo id
// no SGDB
public String recuperaSequence() throws SQLException {

PreparedStatement pstm = this.connection
.prepareStatement("select sec_contatos.nextval from dual");

ResultSet res = pstm.executeQuery();

while (res.next()) {
this.teste = res.getString(1);

}

res.close();
pstm.close();

return teste;

}

// Este método imprime a lista de Contatos gravada no SGDB
public List getListaDeContatos() throws SQLException {
PreparedStatement pstm = this.connection
.prepareStatement("SELECT * FROM CONTATOS");

ResultSet res = pstm.executeQuery();

List contatos = new ArrayList();

while (res.next()) {
// Criando o objeto Contato
Contato contato = new Contato();
contato.setNome(res.getString("nome"));
contato.setEmail(res.getString("email"));
contato.setEndereco(res.getString("endereco"));

// Adicionando o contato a Lista
contatos.add(contato);
}
res.close();
pstm.close();
return contatos;

}

// Solicita dados de entrada e grava no SGDB
public Contato recuperaDadosDoContato() throws SQLException {
Contato contato = new Contato();

String nome = JOptionPane.showInputDialog("NOME");
String email = JOptionPane.showInputDialog("EMAIL");
String endereco = JOptionPane.showInputDialog("ENDEREÇO");

contato.setId(this.recuperaSequence());
contato.setNome(nome);
contato.setEmail(email);
contato.setEndereco(endereco);

this.adiciona(contato);
JOptionPane.showMessageDialog(null, "Registro Gravado com Sucesso!!!",
"Confirmação", 1);

return contato;

}

// Gera Relatório
public void relContatos() throws SQLException {
PreparedStatement pstm = this.connection
.prepareStatement("Select * from contatos order by id");

ResultSet res = pstm.executeQuery();

System.out.println("Relatório de Contatos Cadastrados");
System.out.println();

while (res.next()) {
System.out.print("Código : ");
System.out.println(res.getString("id"));
System.out.print("Nome : ");
System.out.println(res.getString("nome"));
System.out.print("Email : ");
System.out.println(res.getString("email"));
System.out.print("Endereço: ");
System.out.println(res.getString("endereco"));
System.out.println();
}
res.close();
pstm.close();
}

// Realiza pesquiza atravéz do ID Informado
public Contato pesquisaPorId() throws SQLException {
String id = JOptionPane.showInputDialog(null,
"Informe como Parâmetro de Pesquisa",
"Pesquisa de Contatos Por ID", 1);

PreparedStatement pstm = this.connection
.prepareStatement("Select * from contatos where id like " + id);

ResultSet res = pstm.executeQuery();

while (res.next()) {
try {
Contato contato = new Contato();
System.out.println(res.getString("id"));
contato.setId(res.getString("id"));
System.out.println(res.getString("nome"));
contato.setNome(res.getString("nome"));
System.out.println(res.getString("email"));
contato.setEmail(res.getString("email"));
System.out.println(res.getString("endereco"));
contato.setEndereco(res.getString("endereco"));
return contato;

} catch (SQLException e) {
e.getMessage();
return null;

}
}
pstm.close();
res.close();
return null;

}

// Remove contatos encontrados no SGDB
public void removeContatosPorId() throws SQLException {
Contato contato = new Contato();
String idd = JOptionPane.showInputDialog(null,
"ID do Contato que Deseja Excluir", "Exclusão de Contatos", 1);
contato.setId(idd);

PreparedStatement pstm = this.connection
.prepareStatement("delete from contatos where id =? ");

pstm.setString(1, idd);
pstm.execute();
pstm.close();

}

// Alteração de contato
public void alteraContatoPorId() throws SQLException {
Contato contato = new Contato();
String idd = JOptionPane.showInputDialog(null,
"ID do Contato que Deseja Alterar",
"Alteração de Dados do Contato", 1);
contato.setId(idd);

PreparedStatement pstm = this.connection
.prepareStatement("Update contatos set nome=?, email=?, endereco=?");
String nome = JOptionPane.showInputDialog("Corrija o nome do Contato"
+ contato.getNome());
String endereco = JOptionPane
.showInputDialog("Corrija o Endereço do Contato"
+ contato.getEndereco());
String email = JOptionPane.showInputDialog("Corrija o email"
+ contato.getEmail());
//pstm.setString(1, contato.setNome(nome));
//pstm.setString(2, contato.setEmail(email));
//pstm.setString(3, contato.setEndereco(endereco));

pstm.execute();
pstm.close();
}

}

[quote]

nicholas.bittencourt

Tenho uma suspeita mas nao sei o quanto ela pode ser verdade porque estou mais acostumado com JSF do que com JSTL puro… Na verdade, uso os dois integrados na versao 1.2 da EL.

Vi que seu DAO nao possui um campo private chamado listaDeContatos, e por isso pode ser que ele nao encontreo campo que voce referencia. O que é muito estranho pra mim, uma vez que no JSF 1.2 eu consigo fazer essa referencia apenas criando o metodo.

Foi maus nao poder ajudar mais…

bsl.lacerda

Meu Amigo nicholas.bittencourt
Você já tinha me dado a solução quando sugeriu que eu usasse o código deste jeito:

<c:out value="${dao.listaDeContatos[0].nome}"/>

eu não tinha reparado um detalhe que era de colocar o nome do´método depois do get “getListaDeContatos” como “listaDeContatos” iniciando com letra minúscula e eu estava me referenciando com letra maiúscula “ListaDeContatos”. Agora está belezinha.

Obrigado mesmo pela força.
Abraços

Criado 13 de agosto de 2007
Ultima resposta 13 de ago. de 2007
Respostas 9
Participantes 3