Erro displayTag java.lang.Exception

4 respostas
hbdias

Bom dia galera, esse é o meu primeiro Post aqui no GUJ :P Estou estudando pela apostila FJ-21 do Caelum, mas tô com problema na hora de mostrar os dados com Display Tag. Já tentei seguir o tuto da sourcefourge mas tb não consegui, vejam meu código:

Minha classe contatoDAO.Java
package jee;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;



public class ContatoDAO {
	
	private Connection con;
	
	public ContatoDAO(){
		this.con = new ConnectionFactory().getConnection();
	}
	public void adiciona(Contato contato)
	{	
		String sql = "insert into contatos(nome, email,endereco,datanascimento) values (?,?,?,?)";
		try 
		{
			PreparedStatement stmt = con.prepareStatement(sql);
			//insere valores
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getEmail());
			stmt.setString(3, contato.getEndereco());
			stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
			
			stmt.execute();
			stmt.close();
		}catch (SQLException e) {
			// TODO: handle exception
			throw new RuntimeException(e);
		}
	}
	public List<Contato> getLista() throws SQLException{
		String sql = "select * from contatos";
	 try{
		 
		 List<Contato> contatos = new ArrayList<Contato>();
		 PreparedStatement stmt = con.prepareStatement(sql);
		 ResultSet rs = stmt.executeQuery();				
		
		while(rs.next()){
			//System.out.println(rs.getInt(1)+ "::" + rs.getString(2)+ "::" + rs.getString(3)+ "::" + rs.getString(4)+ "::" + rs.getDate(5));
			Contato contato = new Contato();
			contato.setId(rs.getInt(1));
			contato.setNome(rs.getString(2));
			contato.setEndereco(rs.getString(3));
			contato.setEmail(rs.getString(4));
			
			Calendar data = Calendar.getInstance();
			data.setTime(rs.getDate(5));
			contato.setDataNascimento(data);
			
			contatos.add(contato);
		}
		rs.close();
		stmt.close();
		return contatos;
	 }catch (SQLException e) {
		// TODO: handle exception
		 throw new RuntimeException(e);
	  }
	}
	public int altera(Contato contato){
		String sql = "update contatos set nome=?,email=?,endereco=?,datanascimento=? where id=?";
		int ret;
		try{
			PreparedStatement stmt = con.prepareStatement(sql);
			stmt.setInt(5, contato.getId());
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getEmail());
			stmt.setString(3, contato.getEndereco());
			stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
			ret = stmt.executeUpdate();
			return ret;
		}catch (SQLException e) {
			// TODO: handle exception
			throw new RuntimeException(e);
		}	
	}
	public int remove(Contato contato){
		String sql = "delete from contatos where id=?";
		int ret;
		try{
			PreparedStatement stmt = con.prepareStatement(sql);
			stmt.setInt(1, contato.getId());
			ret = stmt.executeUpdate();
			stmt.close();
			return ret;
		}catch (SQLException e){
			throw new RuntimeException(e);
		}
	}
}

Minha JSP lista-contatos-elegante2.jsp

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<%@page import="java.io.PrintWriter"%>
<%@page import="jee.Contato"%>
<%@page import="java.util.List"%>
<%@page import="jee.ContatoDAO"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

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

<jsp:useBean id="cd" class="jee.ContatoDAO" />  

<c:import url="cabecalho.jsp"></c:import>

<%
   List<Contato> contatos = cd.getLista();
    session.setAttribute("lc",contatos);  
%>  
<display:table name="sessionScope.lc" >  
      <display:column property="nome" /> 
</display:table>

<c:import url="rodape.jsp"></c:import>

Os arquivos Jar do displayTag estão em WebContent/WEB-INF/LIB.

Quando chamo http://localhost:8080/fj21-agenda/lista-contatos-elegante2.jsp no novegador a console do eclipse me apresenta o seguinte erro:

07/07/2011 11:13:37 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based 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:/Arquivos de programas/Java/jre6/lib/i386;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Arquivos de programas\TortoiseSVN\bin
07/07/2011 11:13:37 org.apache.tomcat.util.digester.SetPropertiesRule begin
AVISO: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:fj21-agenda' did not find a matching property.
07/07/2011 11:13:38 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
07/07/2011 11:13:38 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1428 ms
07/07/2011 11:13:38 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
07/07/2011 11:13:38 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.32
07/07/2011 11:13:38 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory docs
07/07/2011 11:13:38 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory ROOT
07/07/2011 11:13:39 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
07/07/2011 11:13:39 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
07/07/2011 11:13:39 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/47 config=null
07/07/2011 11:13:39 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1137 ms
07/07/2011 11:13:58 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet jsp threw exception
java.lang.ClassNotFoundException: org.apache.commons.lang.UnhandledException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at java.beans.Introspector.instantiate(Unknown Source)
at java.beans.Introspector.findExplicitBeanInfo(Unknown Source)
at java.beans.Introspector.(Unknown Source)
at java.beans.Introspector.getBeanInfo(Unknown Source)
at org.apache.jasper.compiler.Generator$TagHandlerInfo.(Generator.java:3890)
at org.apache.jasper.compiler.Generator$GenerateVisitor.getTagHandlerInfo(Generator.java:2157)
at org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1630)
at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2417)
at org.apache.jasper.compiler.Node$Root.accept(Node.java:495)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
at org.apache.jasper.compiler.Generator.generate(Generator.java:3442)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:231)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:347)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:326)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)

4 Respostas

R
java.lang.ClassNotFoundException: org.apache.commons.lang.UnhandledException
hbdias

Detalhe: se eu usar o ForEach com EL funciona normalmente, os dados são listados:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<%@page import="java.io.PrintWriter"%>
<%@page import="jee.Contato"%>
<%@page import="java.util.List"%>
<%@page import="jee.ContatoDAO"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

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

<jsp:useBean id="cd" class="jee.ContatoDAO" />  

<c:import url="cabecalho.jsp"></c:import>


<table>
			<tr>
				<td>Nome</td>
				<td>Email</td>
				<td>Endereco</td>
				<td>Data Nascimento</td>
			</tr>

<c:forEach var="contato" items="${cd.lista}" varStatus="id">		
			<tr bgcolor="#${id.count %2 == 0 ? 'aaee88' : 'ffffff'}" >
				<td>${contato.nome}</td>
				<td>
					<c:choose>
						<c:when test="${not empty contato.email}"> 
							<a href="mailto:${contato.email}">${contato.email}</a>
						</c:when>
						<c:otherwise>
							E-mail não informado
						</c:otherwise>
					</c:choose>						
				</td>
				<td>${contato.endereco}</td>
				<td>
					<fmt:formatDate value="${contato.dataNascimento.time}" pattern="dd/MM/yyyy"></fmt:formatDate>					
				</td>				
			</tr>
	</c:forEach>	
	</table>
	<c:import url="rodape.jsp"></c:import>

Ou seja isso prova que o uso do Displaytag está errado. Poderiam por favor me dar uma luz, estou a três dias tentando pelo menos listar alguma coisa mas nada acontece. Obrigado!

hbdias

Opa…raf4ever, blz cara? Então, pelo que andei pesquisando referente ao erro que vc me apontou será necessário incluir os jars commons-lang e commons-beanutils é isso mesmo? se sim onde encontro isso. Tenho que colocar eles no WEB-INF/LIB também?Valew

hbdias

Galera consegui resolver. O problema estava no uso dos arquivos do displaytag. Eu coloquei os jar dentro do WEB-INF/lib e o certo era descompactá-los. Após isso funcionou. Obrigado!

Criado 7 de julho de 2011
Ultima resposta 7 de jul. de 2011
Respostas 4
Participantes 2