Problemas ao utilizar displaytag - apostila fj21

Pessoal, estou seguindo a apostila fj21, referente a desenvolvimento web da Caelum e na página 99 a mesma propoe um desafio. Listar os contatos utilizando uma taglib chamada displaytag.

Fui até o endereço citado na apostila, vi alguns exemplos e fiz o download dos arquivos.

Porém, ao rodar a aplicação é gerado um erro que não estou conseguindo solucionar.

Se alguem puder me ajudar eu agradeço.

Erro gerado:

exception

javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/commons/lang/UnhandledException
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:343)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

root cause

java.lang.NoClassDefFoundError: org/apache/commons/lang/UnhandledException
java.lang.Class.getDeclaredConstructors0(Native Method)
java.lang.Class.privateGetDeclaredConstructors(Class.java:2404)
java.lang.Class.getConstructor0(Class.java:2714)
java.lang.Class.newInstance0(Class.java:343)
java.lang.Class.newInstance(Class.java:325)
com.sun.beans.finder.InstanceFinder.instantiate(InstanceFinder.java:96)
com.sun.beans.finder.InstanceFinder.find(InstanceFinder.java:66)
java.beans.Introspector.findExplicitBeanInfo(Introspector.java:455)
java.beans.Introspector.(Introspector.java:405)
java.beans.Introspector.getBeanInfo(Introspector.java:174)
org.apache.jasper.compiler.Generator$TagHandlerInfo.(Generator.java:3912)
org.apache.jasper.compiler.Generator$GenerateVisitor.getTagHandlerInfo(Generator.java:2199)
org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1627)
org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1539)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2428)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2434)
org.apache.jasper.compiler.Node$Root.accept(Node.java:475)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376)
org.apache.jasper.compiler.Generator.generate(Generator.java:3474)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:249)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:372)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:352)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:339)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:594)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:344)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

root cause

java.lang.ClassNotFoundException: org.apache.commons.lang.UnhandledException
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
java.lang.Class.getDeclaredConstructors0(Native Method)
java.lang.Class.privateGetDeclaredConstructors(Class.java:2404)
java.lang.Class.getConstructor0(Class.java:2714)
java.lang.Class.newInstance0(Class.java:343)
java.lang.Class.newInstance(Class.java:325)
com.sun.beans.finder.InstanceFinder.instantiate(InstanceFinder.java:96)
com.sun.beans.finder.InstanceFinder.find(InstanceFinder.java:66)
java.beans.Introspector.findExplicitBeanInfo(Introspector.java:455)
java.beans.Introspector.(Introspector.java:405)
java.beans.Introspector.getBeanInfo(Introspector.java:174)
org.apache.jasper.compiler.Generator$TagHandlerInfo.(Generator.java:3912)
org.apache.jasper.compiler.Generator$GenerateVisitor.getTagHandlerInfo(Generator.java:2199)
org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1627)
org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1539)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2428)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2434)
org.apache.jasper.compiler.Node$Root.accept(Node.java:475)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376)
org.apache.jasper.compiler.Generator.generate(Generator.java:3474)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:249)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:372)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:352)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:339)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:594)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:344)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

Página que gera o erro:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@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/el" prefix="display" %>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <c:import url="cabecalho.jsp"/>
        
        <%request.setAttribute("lista", dao.getLista()); %>
        <display:table name="lista" />
       
        
        <c:import url="rodape.jsp"/>
    </body>
</html>

Dao, de onde busco os dados

    public List<Contato> getLista() {
        try {
            List<Contato> contatos = new ArrayList<Contato>();
            PreparedStatement stmt = this.connection.prepareStatement("select * from contato"
                    + " order by nm_contato");
            ResultSet rs = stmt.executeQuery();

            while (rs.next()) {
                // criando o objeto Contato
                Contato contato = new Contato();
                contato.setId(rs.getLong("id"));
                contato.setNome(rs.getString("nm_contato"));


                // montando a data através do Calendar
                Calendar data = Calendar.getInstance();
                data.setTime(rs.getDate("dt_nascimento"));
                contato.setDataNascimento(data);
                contato.setEmail(rs.getString("ds_email"));

                // adicionando o objeto à lista
                contatos.add(contato);
            }
            rs.close();
            stmt.close();
            return contatos;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

Bom dia,

jks1903, esta faltando algumas dependencias, da uma olhada nesse endereço

http://www.displaytag.org/1.2/install.html

[quote=DaniloAndrade]Bom dia,

jks1903, esta faltando algumas dependencias, da uma olhada nesse endereço

http://www.displaytag.org/1.2/install.html[/quote]

Blza, resolvi o problema.
O curioso é que eu havia baixado esses arquivos e importado no projeto, porém o problema estava no commons-lang, pois eu havia baixado inicialmente a ultima versão, que é a 3.1 se nao me engano. Aí removi os .jar dessa versão e importei a versão 2.6, que resolveu o problema.

Obrigado pela ajuda.

Boa noite.
Também tive problemas com o displaytag, mas acabei de resolver. Essas dependências realmente que acabam enrolando tudo.
Vou informar o passo-a-passo da minha solução(informo que estou usando o Eclipse ocmo IDE):
1- Primeiramente é necessário baixar alguns arquivos(os arquivos vem todos zipados, e os dois primeiros são no mesmo link, depois fui baixando cada arquivo em um link diferente):
a - displaytag-1.2-bin.zip(http://sourceforge.net/projects/displaytag/files/display%20tag%20library/1.2/)
b - displaytag-1.2-src.zip(http://sourceforge.net/projects/displaytag/files/display%20tag%20library/1.2/)
c - commons-beanutils-1.8.3-bin.zip(http://commons.apache.org/beanutils/download_beanutils.cgi)
d - commons-collections-3.2.1-bin.zip(http://commons.apache.org/collections/download_collections.cgi)
e - commons-lang-2.6-bin.zip(http://commons.apache.org/lang/download_lang.cgi)
f - commons-logging-1.1.1-bin.zip(http://commons.apache.org/logging/download_logging.cgi)
g - log4j-1.2.17.zip(http://logging.apache.org/log4j/1.2/download.html)

2- Depois de baixar todos os arquivos, descompacte-os.
3- Agora é a hora de colocá-los nos seus devidos lugares. Coloque cada arquivo no seu destino, como citado abaixo :
a - procure o “displaytag.tld”(deve estar em “displaytag-1.2-src\displaytag-1.2\displaytag\src\main\resources\META-INF”). Copie e cole no seu projeto(dentro de WebContent\WEB-INF).
b - procure o “displaytag-1.2.jar”(deve estar em “displaytag-1.2-bin\displaytag-1.2”). Copie e cole no seu projeto(WebContent\WEB-INF\lib).
c - procure o “commons-beanutils-1.8.3.jar”(na pasta que você desconpactou). Copie e cole no seu projeto(WebContent\WEB-INF\lib).
d - procure o “commons-collections-3.2.1.jar”(na pasta que você descompactou). Copie e cole no seu projeto(WebContent\WEB-INF\lib).
e - procure o “commons-lang-2.6.jar”(na pasta que você descompactou). Copie e cole no seu projeto(WebContent\WEB-INF\lib).
f - procure o “commons-logging-1.1.1.jar”(na pasta que você descompactou). Copie e cole no seu projeto(WebContent\WEB-INF\lib).
g - procure o “log4j-1.2.17.jar”(na pasta que você descompactou). Copie e cole no seu projeto(WebContent\WEB-INF\lib).

4- Agora que já foram dados os respectivos destinos aos arquivos. Atualize o projeto dando um refresh(lembrando que eu estou usando o Eclipse como IDE) .
5- Coloque o .jar no path, seguindo o seguinte caminho :
a - No Eclipse abra seu projeto. Abra o “WebContent” e depois “lib”.
b - Clique com o botão direito em “displaytag-1.2.jar”, Build Path, Add to build path.
6- Reinicie o tomcat ou o servidor que estiver utilizando, e assim já deve estar funcionando.
Espero que tenha ajudado

1 curtida

Segui os passos do alexandresilveira e consegui rodar o displaytag com sucesso =)