Apostila Caelum fj21 - Erro forEach JSTL

2 respostas
serginhosue

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:

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);	
		}
	}
}

[size=18][color=darkblue]Agora o erro que aparece no browser:[/color][/size]

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

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)

2 Respostas

davidbuzatto

A declaração da Taglib está errada. Faltou um “jsp” no meio.

O correto é:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

[]´s

serginhosue

Coloquei o import acima e contina dando erro…

Subi meu servidor em modo debug, fui indo passo a passo, ele entra na minha classe dao, monta o list, com os select’s do BD e retorna um list no final do meu método, porém o JSP não consegue entender e mostrar na tela.

Criado 3 de setembro de 2010
Ultima resposta 3 de set. de 2010
Respostas 2
Participantes 2