Bom dia Pessoal,
Estou fazendo os exercícios da apostila fj21, exatamente o exercício 7.7 onde eles pedem que se crie um forEach para listar os objetos(“Contatos armazenados no BD”) no JSP utilizando as TAG’s do JSTL.
Segue abaixo o código do meu JSP:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="br.com.agenda.DAO.*, br.com.modelo.*"%>
<%@page import="java.util.List"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<html>
<body>
<!-- cria a lista-->
<jsp:useBean id="dao" class="br.com.agenda.DAO.ContatoDAO" />
<table>
<!-- for -->
<c:forEach var="contato" items="${dao.lista}">
<tr>
<td>${contato.nome}</td>
<td>${contato.email}</td>
<td>${contato.endereco}</td>
<td>${contato.telRes}</td>
<td>${contato.telCel}</td>
<td>${contato.dtNascimento}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
Abaixo o Código da minha classe DAO:
[code]package br.com.agenda.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 br.com.conexao.ConDBSQL;
import br.com.modelo.Contato;
public class ContatoDAO{
private static final long serialVersionUID = 1L;
private Connection connection;
public ContatoDAO() {
this.connection = new ConDBSQL().getConnection();
}
/**
* @author Sergio
* metodo insere contato
* @param contato
*/
public void adiciona(Contato contato){
String sql = "insert into tb_contatos (nome,email,endereco,telRes,telCel,dtNasc) values (?,?,?,?,?,?)";
try{
//prepared statement para inserir dados
PreparedStatement stmt = connection.prepareStatement(sql);
//seta os valores
stmt.setString(1,contato.getNome());
stmt.setString(2,contato.getEmail());
stmt.setString(3,contato.getEndereco());
stmt.setString(4,contato.getTelRes());
stmt.setString(5,contato.getTelCel());
stmt.setString(6,contato.getDtNascimento());
stmt.execute();
stmt.close();
}catch(SQLException e){
throw new RuntimeException(e);
}
}
/**
* @author Sergio
* metodo que lista os contatos armazenados no banco
* @return
*/
public List<Contato> getLista(){
try{
List<Contato> listContatos = new ArrayList<Contato>();
PreparedStatement stmt = this.connection.prepareStatement("select * from tb_contatos");
ResultSet rs = stmt.executeQuery();
while(rs.next()){
//cria objeto contato
Contato objContato = new Contato();
objContato.setNome(rs.getString("nome"));
objContato.setEmail(rs.getString("email"));
objContato.setEndereco(rs.getString("endereco"));
objContato.setTelRes(rs.getString("telRes"));
objContato.setTelCel(rs.getString("telCel"));
objContato.setDtNascimento(rs.getString("dtNasc"));
listContatos.add(objContato);
}
rs.close();
stmt.close();
return listContatos;
}catch(SQLException e){
throw new RuntimeException(e);
}
}
}
[/code]
[size=18][color=darkblue]Agora o erro que aparece no browser:[/color][/size]
[code]HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: /lista-contatos-elegante.jsp(13,1) According to TLD or attribute directive in tag file, attribute items does not accept any expressions
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:952)
org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:706)
org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1442)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2166)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2216)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2222)
org.apache.jasper.compiler.Node$Root.accept(Node.java:457)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2166)
org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1481)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:188)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:317)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:298)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:302)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.28 logs.
Apache Tomcat/5.5.28[/code]
E por fim o erro que aparece no console do eclipse:
03/09/2010 08:47:38 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Arquivos de programas\Java\jre6\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Arquivos de programas/Java/jre6/bin/client;C:/Arquivos de programas/Java/jre6/bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;%JAVA_HOME%\bin;C:\Arquivos de programas\Microsoft SQL Server\80\Tools\BINN;;C:\ARQUIV~1\E!98
03/09/2010 08:47:38 org.apache.coyote.http11.Http11BaseProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
03/09/2010 08:47:38 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 281 ms
03/09/2010 08:47:38 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
03/09/2010 08:47:38 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/5.5.28
03/09/2010 08:47:38 org.apache.catalina.core.StandardHost start
INFO: XML validation disabled
03/09/2010 08:47:38 org.apache.coyote.http11.Http11BaseProtocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
03/09/2010 08:47:38 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
03/09/2010 08:47:38 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/16 config=null
03/09/2010 08:47:39 org.apache.catalina.storeconfig.StoreLoader load
INFO: Find registry server-registry.xml at classpath resource
03/09/2010 08:47:39 org.apache.catalina.startup.Catalina start
INFO: Server startup in 359 ms
03/09/2010 08:48:29 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: /lista-contatos-elegante.jsp(13,1) According to TLD or attribute directive in tag file, attribute items does not accept any expressions
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
at org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:952)
at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:706)
at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1442)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2166)
at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2216)
at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2222)
at org.apache.jasper.compiler.Node$Root.accept(Node.java:457)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2166)
at org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1481)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:188)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:317)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:298)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:302)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)