No tô conseguindo exibir os dados de uma tabela

6 respostas
R
Sou iniciante em Java e tô apanhando um pouco, acho que em alguns detalhes... Tô com uma pagina welcomeStruts.jsp que será utilizada p/ a exibicao em formato tabular, dos dados existentes na tabela Autores do BD livraria. Creio que o erro esta só nessa pagina, pois ja configurei o struts-config.xml certinho. Segue o codigo welcomeStruts:
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>

<html:html>
    <head>
        <title>Autores Cadastrados</title>
    </head>
<body>
    <table border="1">
        <thead>
            <tr>
                <td>ID</td>
                <td>Nome</td>
                <td>E-mail</td>
                <td>Nascimento</td>
            </tr>
        </thead>
        <tbody>
            <form name="AutoresActionForm">
                <logic:iterate property="autor" id="aa">
                    <logic:notEmpty name="aa">
                        <tr>
                            <td>
                                <bean:write name="aa" property="autorId" />          
                            </td>
                            <td>
                                <bean:write name="aa" property="nome" />          
                            </td>
                            <td>
                                <bean:write name="aa" property="email" />          
                            </td>
                            <td>
                                <bean:write name="aa"
                                            property="nascimento"
                                            format="dd/MM/yyyy"/>
                            </td>         
                        </tr>
                    </logic:notEmpty>
                    
                    <logic:empty name="aa">
                        <tr>
                            <td colspan="3">Nenhum autor encontrado.</td>
                        </tr>
                    </logic:empty>
                </logic:iterate>
            </form>
        </tbody>
    </table>
   
    </body>
</html:html>

O erro que da é esse:
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: Exception in JSP: /welcomeStruts.jsp:21

18:
19:
20:


21:
22:
23:
24:

Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)

root cause

java.lang.NullPointerException: Null attribute name
org.apache.jasper.runtime.PageContextImpl.findAttribute(PageContextImpl.java:456)
org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:889)
org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:931)
org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:232)
org.apache.jsp.welcomeStruts_jsp._jspService(welcomeStruts_jsp.java:101)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.
Apache Tomcat/5.5.17

Desde ja agradeço... Abraço!!

6 Respostas

rapatao

Posso estar enganado, mas acredito que você está passando um Iterator com nome diferente do que você verifica, verifique isso!
De qualquer maneira, tente trocar a ordem dos <logic…>
Deixe assim:

<logic:notEmpty name="autor" scope="request">
  <logic:iterate name="autor" id="aa" scope="request">
 //seu codigo
  </logic:iterate>
</logic:notEmpty>
<logic:Empty name="autor" scope="request">
 ///seu codigo
</logic:Empty>

Tente efetuar estas mudanças…

Abraços

F

Amigo depois q verificar a dica do amigo, apenas para conselho mesmo rs alias sujestao rs, comece a usar JSTL pois vc deixa seu JSP idependente de API como Struts, pois se amanha vc pegar essa jsp e usar um servelet ou um vraptor tera q mudar todas e se tiver usando JSTL so vai mudar a camada de controle da sua aplicação…

Ex. jstl

<c:choosse>
<c:when test${obj.atributo != null} >
seu htmk
</c:when>
<c:when test${obj.atributo == ‘oi’} >
seu htmk
</c:when>
</c:choosse>

para percorrer
<c:forEachvar=“lista” items="${seu objeto collection}">
lista.atribute
</c:forEachvar>

espero ter ajudado rs…

Att

Guto_Magalhaes

Cara, eu não sei se vou poder te ajudar, ja que eu não manjo quase nada de jsp, mas vc esta utilizando o que para enviar os dados? Se for uma collection, de um jeito de mapear no struts-config.xml tipo uma constante para identificar cada collection que vc ira utilizar na interface do usuario, e ai crie uma interface no java so para setar as constantes, e implemente esta interface na sua action.

Falow ae

R

rapatao:
Posso estar enganado, mas acredito que você está passando um Iterator com nome diferente do que você verifica, verifique isso!
De qualquer maneira, tente trocar a ordem dos <logic…>
Deixe assim:

<logic:notEmpty name="autor" scope="request">
  <logic:iterate name="autor" id="aa" scope="request">
 //seu codigo
  </logic:iterate>
</logic:notEmpty>
<logic:Empty name="autor" scope="request">
 ///seu codigo
</logic:Empty>

Tente efetuar estas mudanças…

Abraços

Tô apanhando aqui “rapatao”, vê se tu consegue da uma força, dei uma mudada no codigo mais continua sem rodar, segue em anexo o codigo:

...
<tbody>
            <logic:iterate name="AutoresActionForm"
                property="autor"
                id="autor">
                      <tr>
                            <td>
                     <bean:write name="autor" property="autorId" />          
                            </td>
                            <td>
                     <bean:write name="autor" property="nome" />          
                            </td>
                            <td>
                     <bean:write name="autor" property="email" />          
                            </td>
                            <td>
                     <bean:write name="autor"
                                 property="nascimento"
                                 format="dd/MM/yyyy"/>
                            </td>         
                        </tr>
                    </logic:iterate>
                    
                    <logic:notPresent name="autor">
                        <tr>
                            <td colspan="3">Nenhum autor encontrado.</td>
                        </tr>
                    </logic:notPresent>
                    
                
            </tbody>
...

O erro que ta dando é esse:

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: Exception in JSP: /welcomeStruts.jsp:20

17:
18:
19:


20: <logic:iterate name=“AutoresActionForm”
21: property=“autor”
22: id=“autor”>
23:
Stacktrace:

org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)

root cause

javax.servlet.ServletException: Cannot find bean: “AutoresActionForm” in any scope

org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)

org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)

org.apache.jsp.welcomeStruts_jsp._jspService(welcomeStruts_jsp.java:179)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)

root cause

javax.servlet.jsp.JspException: Cannot find bean: “AutoresActionForm” in any scope

org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:935)

org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:232)

org.apache.jsp.welcomeStruts_jsp._jspService(welcomeStruts_jsp.java:98)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.
Apache Tomcat/5.5.17

rapatao

Não li o stacktrace inteiro, mas acho que sei qual é o problema!

Em seu Servlet controlador, você está passando na requisição um Iterator? E em algum momento ele vai nulo? Enfim, acredito que o problema é justamente aí, que você passa um Iterator nulo.
Antes de utilizar o <logic:iterate… você precisa verificar se o mesmo está nulo ou não! Olhe que você verifica se ele é nulo para exibir uma mensagem, o mesmo deve ser feito, porém verificando se o mesmo não é nulo. Ele não sendo, deve se usar o iterate, caso não ele gera uma Exception.
Ahh, não sei se é realmente necessário, mas acredito que você precise também indicar de onde vem este Iterator, ou seja, como no meu exemplo dado anteriormente …scope=“request”>
Enfim, é isso…

Boa sorte!

L

Eu estava com esse problema. Por alguma razão a tag de iteração não acha o bean utilizado no formulário. Tem que ser passado o nome dele no atributo ‘name’ das tags! Foda !

Ficaria assim:

<html:form name="AutoresActionForm">  
                 <logic:iterate name="AutoresActionForm" property="autor" id="aa">  
                     <logic:notEmpty name="aa">  
                         <tr>  
                             <td>  
                                 <bean:write name="aa" property="autorId" />            
                             </td>  
                             <td>  
                                 <bean:write name="aa" property="nome" />            
                             </td>  
                             <td>  
                                 <bean:write name="aa" property="email" />            
                             </td>  
                             <td>  
                                 <bean:write name="aa"  
                                             property="nascimento"  
                                             format="dd/MM/yyyy"/>  
                             </td>           
                         </tr>  
                     </logic:notEmpty>  
                       
                     <logic:empty name="aa">  
                         <tr>  
                             <td colspan="3">Nenhum autor encontrado.</td>  
                         </tr>  
                     </logic:empty>  
                 </logic:iterate>  
             </html:form>
Criado 18 de julho de 2007
Ultima resposta 31 de jul. de 2008
Respostas 6
Participantes 5