Boa noite pessoal, há dois dias venho buscando encontrar uma solução para o erro a baixo, mas não consegui resolve-lo das maneiras propostas.
-
O exercício é listar os contatos persistido no meu banco de dados através das taglibs do tipo core. (Exercício 7.7 da apostila Caelum fj21).
1.1. Criei minha Java Bean conforme a baixo:
public class Contato {
public Long id;
public String nome;
public String email;
public String endereco;
public Calendar dataNascimento;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public Calendar getDataNascimento() {
return dataNascimento;
}
public void setDataNascimento(Calendar dataNascimento) {
this.dataNascimento = dataNascimento;
}
}
1.2 - Segue o método de listar os contatos da minha DAO:
public List getLista() {
try {
List contatos = new ArrayList();
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);
}
}
1.3 - Segue minha JSP de listagem:
<%@ taglib uri = “http://java.sun.com/jsp/jstl/core” prefix =“c” %>
<%@ page language=“java” contentType="text/html; charset=ISO-8859-1"
pageEncoding=“ISO-8859-1”%>
<body>
<!-- Primeiramente iremos instanciar nossa dao para que possamos manipular os dados -->
<jsp:useBean id="dao" class="br.com.caelum.agenda.dao.ContatoDao"/>
<!-- Agora vamos iterar sobre a lista trazida pelo método dao em "contato" -->
<table>
<c:forEach var="contato" items="S{dao.lista}">
<tr>
<td>${contato.nome}</td>
<td>${contato.email}</td>
<td>${contato.endereco}</td>
<td>${contato.dataNascimento.time}</td>
</tr>
</c:forEach>
</table>
</body>
1.4 - Segue o erro:
fev 17, 2016 10:57:49 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [jsp] in context with path [/fj21-agenda] threw exception [An exception occurred processing JSP page /lista-contato.jsp at line 27
24:
${cont.nome} |
Stacktrace:] with root cause
javax.el.PropertyNotFoundException: Property ‘nome’ not found on type java.lang.String
at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:229)
at javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:206)
at javax.el.BeanELResolver.property(BeanELResolver.java:317)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:85)
at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
at org.apache.el.parser.AstValue.getValue(AstValue.java:183)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:1026)
at org.apache.jsp.lista_002dcontato_jsp._jspx_meth_c_005fforEach_005f0(lista_002dcontato_jsp.java:140)
at org.apache.jsp.lista_002dcontato_jsp._jspService(lista_002dcontato_jsp.java:99)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
2.0 - Aparentemente seria um erro na EL que busca dados através do método getNome, mas não consigo identificar um erro equivalente. Já apaguei o cache do servidor (pasta work), mas mesmo assim o erro impera. O que não estou vendo?
Agradeço antecipadamente.