Uso de Displaytag (iniciante)

Desafio 8.6 da apostila FJ-21: Adicionar displaytag pra fazer uma listagem.

Eu juro que já tentei de todas as formas… rs… mas não deu! Sou iniciante no assunto web e tô levando aquela surra. Alguém pode me dizer o que eu tô fazendo errado? Abaixo as informações.

Meu JSP:

[code]<%@ 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” %>

<%@ 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”>
<html>
<head>
<meta http-equiv=“Content-Type” content=“text/html; charset=ISO-8859-1”>
<title>Lista contato elegante</title>
</head>
<body>
<c:import url=“cabecalho.jsp” />

	&lt;!-- cria o DAO --&gt;
	&lt;jsp:useBean id="dao" class="br.com.caelum.agenda.dao.ContatoDAO" /&gt;
	

    &lt;display:table name="${dao.lista}" export="false" id="contato"&gt;
		&lt;display:column title="Nome" property="nome" /&gt;
		
		&lt;c:choose&gt;
			&lt;c:when test="${not empty contato.email}"&gt;
				&lt;display:column title="E-mail" property="email" autolink="true" /&gt;
			&lt;/c:when&gt;
			&lt;c:otherwise&gt;
				&lt;display:column title="E-mail" value="E-mail não informado" /&gt;
			&lt;/c:otherwise&gt;
		&lt;/c:choose&gt;
		
		&lt;display:column title="Endereço" property="endereco" /&gt;
		
		&lt;fmt:formatDate value="${contato.dataNascimento.time}" pattern="dd/MM/yyyy" var="dataEmTexto"/&gt;
		&lt;display:column title="Data de nascimento" value="${dataEmTexto}" /&gt;
		
	&lt;/display:table&gt;		
	
	
	&lt;c:import url="rodape.jsp" /&gt;	
&lt;/body&gt;

</html>[/code]

Quando chamo o JSP no navegador, dá o seguinte erro no Console:

Jul 26, 2012 9:57:08 PM org.apache.catalina.core.StandardWrapperValve invoke Grave: Servlet.service() for servlet [jsp] in context with path [/fj21-agenda] threw exception [java.lang.NoClassDefFoundError: org/apache/commons/lang/UnhandledException] with root cause java.lang.ClassNotFoundException: org.apache.commons.lang.UnhandledException at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556) 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 com.sun.beans.finder.InstanceFinder.instantiate(Unknown Source) at com.sun.beans.finder.InstanceFinder.find(Unknown Source) at java.beans.Introspector.findExplicitBeanInfo(Unknown Source) at java.beans.Introspector.&lt;init&gt;(Unknown Source) at java.beans.Introspector.getBeanInfo(Unknown Source) at org.apache.jasper.compiler.Generator$TagHandlerInfo.&lt;init&gt;(Generator.java:3944) at org.apache.jasper.compiler.Generator$GenerateVisitor.getTagHandlerInfo(Generator.java:2209) at org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1640) at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1539) at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376) at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2428) at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2434) at org.apache.jasper.compiler.Node$Root.accept(Node.java:475) at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376) at org.apache.jasper.compiler.Generator.generate(Generator.java:3490) at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:250) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:373) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:353) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357) 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:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) 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)

Coloquei o arquivo displaytag-1.2.jar dentro de \WebContent\WEB-INF\lib do meu projeto.

Estou usando Eclipse Juno, Java 7, TomCat 7, WinXP (já tentei em um PC com Eclipse Indigo, Java 6, TomCat 6 e Ubunto e deu exatamente o mesmo erro)

Agradeço qq dica!

Grata,
Renata

1 curtida

Olhe a mensagem de erro: java.lang.ClassNotFoundException: org.apache.commons.lang.UnhandledException

Toda vez que você estiver com esse erro é pq está faltando algum jar na sua aplicação.

Procure a frase abaixo no google:
jar org.apache.commons.lang.UnhandledException

Que você irá encontrar o jar referente para essa classe.

Olá jakefrog! Obrigada pela dica!

Fiz o que vc falou e cheguei a conclusão de que o que faltava era o commons-lang. Ai tive algumas dificuldades pq encontrei vários com o nome parecido e não sei exatamente qual deve ser.

Fiz o download do commons-lang3-3.1.jar e coloquei na pasta lib, mas ainda não funcionou. A msg de erro mudou pelo menos.

Continuei pesquisando e cheguei nesse link: http://stackoverflow.com/questions/8640596/displaytag-1-2-error

Veja a resposta:

Segui essa resposta e procurei cada um dos jars mencionados, coloquei tudo na minha lib, mas a msg de erro continua. Na resposta fala algo sobre os tlds, e dá uma olhada na msg de erro que tenho agora, parece ter algo haver com os tlds, como se não encontrasse. O que tenho que fazer?

Erro atual:

[code]Jul 27, 2012 10:25:16 PM org.apache.jasper.compiler.TldLocationsCache tldScanJar
Informações: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Jul 27, 2012 10:25:16 PM org.apache.catalina.core.StandardWrapperValve invoke
Grave: Servlet.service() for servlet [jsp] in context with path [/fj21-agenda] threw exception [null] with root cause
javax.servlet.ServletException
at br.com.caelum.agenda.filtro.FiltroConexao.doFilter(FiltroConexao.java:34)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at br.com.caelum.agenda.filtro.FiltroTempoDeExecucao.doFilter(FiltroTempoDeExecucao.java:23)
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:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
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)

[/code]

Lista de JARs que coloquei na minha pasta lib (por favor, se algum for inútil me avise que eu tiro, realmente não sei se precisa):

apache-commons-logging.jar apache-logging-log4j.jar commons-beanutils-1.8.3.jar commons-collections-3.2.1.jar commons-lang3-3.1.jar displaytag-1.2.jar javax.servlet.jsp.jstl-1.2.1.jar // esse eu uso javax.servlet.jsp.jstl-api-1.2.1.jar // esse eu uso mysql-connector-java-5.1.21-bin.jar // esse eu uso

Grata,
Renata :roll:

Oi pessoal, desculpa responder denovo… mas ngn sabe msm como eu devo fazer?

Tente usar este jar aqui: http://www.java2s.com/Code/JarDownload/apache-commons/apache-commons-lang.jar.zip

Olá Wendell Albino!!!

Muito obrigada por responder! Sua dica deu certo, com esse JAR que vc passou funcionou sim! :lol:

Só fiquei sem entender uma coisa… eu tentei tirar os JARs que eu já tinha (os que eu alistei alguns posts acima) e ai parou de funcionar denovo. Então quer dizer que preciso de todos esses? Ou tem JAR a mais nessa história? Quais será que realmente está usando?

Obrigada mais uma vez! :stuck_out_tongue:

Precisa de todos esses ae listados, e quando chegar mais pra baixo na parte de SpringMVC e afins vai precisar de muito mais. :lol:

Isso mesmo! Os que vc listou são o mínimo para funcionar esta parte.

Tendi!

Obrigada pessoal, to aprendendo ainda e vcs me deram aquela força!

Grata,
Renata

Essa discussão foi muito útil para mim tambem, agradeço.

Pessoal Queria agradecer também pois a discussão também me ajudou.
Valeu !

1 curtida

Oi pessoal, depois de algum tempo venho agradecer pois essa discussão também foi muito útil pra mim, e provavelmente deve ter sido e ainda será para muitas outras pessoas. Creio eu que a caelum poderia colocar um pequeno adicional na apostila com essa parte.
Abraços!

1 curtida

Olá pessoal!
Foi extremamente útil esta discussão pra a resolução desta questão!
Quero adicionar algumas informações atualizadas:

Ainda não é possível utilizar o display tag library com commons-collections versão 4, mas na hora de baixar escolhendo a versão commons-collections-3.2.1.jar
funcionou corretamente!