Não consigo mostrar meus dados no jsp [Resolvido]

35 respostas
M

Olá pessoal,

por alguma razão não consigo de forma alguma mostrar meus dados no JSP. Tenho um bean Grupos e uma classe GruposService, onde tenho a funcao abaixo:

public List getGruposList() {
         Session session = ConnectionFactory.getInstance().getSession();
         
         try {
             Query query =
                     session.createQuery(
                     "select gp.grupo, gp.descricao from auge.bean.Grupos gp order by gp.descricao");
             return query.list();
             
         } catch (HibernateException e) {
             System.err.println("Hibernate Exception" + e.getMessage());
             throw new RuntimeException(e);
         } finally {
             if (session != null) {
                 try {
                     session.close();
                 } catch (HibernateException e) {
                     System.err.println("Hibernate Exception" + e.getMessage());
                     throw new RuntimeException(e);
                 }
                 
             }
         }
     }

Como podem ver, ela me retorna uma List dos grupos. Tentei mostrar isso na tela de duas formas: a primeira foi usando o logic:iterate do struts, e a segunda, o c:forEach do JSTL. Ambas deram problema e pareciam corretas, o que me faz pensar que o problema seja em algum outro local. Gostaria que vcs me ajudassem a descobrir onde.

No primeiro caso, usando o logic:iterate, tenho o JSP da seguinte maneira:

<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
 <%@ taglib uri="/tags/struts-html" prefix="html" %>
 <%@ taglib uri="/tags/struts-logic" prefix="logic" %>
 <%@ page import="auge.conexao.GruposService" %>
 <%@ page import="java.util.List" %>
 
 <html:html locale="true">
 <head>
    <title>Listagem de Grupos</title>
    <html:base/>
 </head>
 <body bgcolor="white">
 
 
    <html:errors/>
    <%
       List gruposList = GruposService.getInstance().getGruposList();
       request.setAttribute("grupos", gruposList);
    %>
 
    <table border=1>
    <tr>
       <td>Grupo</td> 
       <td>Descrição</td>	
    </tr>
    <logic:iterate id="element" name="grupos"  type="auge.bean.Grupos" >
    <tr>
       <td><bean:write name="element" property="grupo" /></td>    
       <td><bean:write name="element" property="descricao" /></td>	
    </tr>
    </logic:iterate>
    </table>
 <p>
 <html:link action="/Grupos.do">Voltar</html:link>
 </body>
 </html:html>

O erro que recebo é o seguinte:

javax.servlet.jsp.JspException: Cannot find bean element in any scope
         at org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:934)
         at org.apache.struts.taglib.bean.WriteTag.doStartTag(WriteTag.java:225)
         at org.apache.jsp.pages.gruposLista_jsp._jspx_meth_bean_write_0(gruposLista_jsp.java:229)
         at org.apache.jsp.pages.gruposLista_jsp._jspService(gruposLista_jsp.java:140)
         at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
         at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
         at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
         at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
         at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:825)
         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:738)
         at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:526)
         at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
         at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
         at java.lang.Thread.run(Thread.java:534)

No segundo caso, meu JSP ficou da seguinte maneira:

<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="auge.conexao.GruposService" %>
<%@ page import="java.util.List" %>

<html:html locale="true">
<head>
    <title>Listagem de Grupos</title>
    <html:base/>
</head>
<body bgcolor="white">


    <html:errors/>
    <%
       List gruposList = GruposService.getInstance().getGruposList();
       request.setAttribute("gruposLista", gruposList);
    %>

    <table border=1>
   
    <tr>
       <td>Grupo</td>
       <td>Descrição</td>   
    </tr>
    <c:forEach var="grupos" items="${gruposLista}">
    <tr>
       <td><c: out value="${grupos.grupo}" /></td>
       <td><c: out value="${grupos.descricao}" /></td>           
    </tr>   
    </c:forEach>

   
    </table>   
<p>
<html:link action="/Grupos.do">Voltar</html:link>
</body>
</html:html>

Nesta nova situação, recebo o seguinte erro:

javax.servlet.jsp.el.ELException: The "." operator was supplied with an index value of type "java.lang.String" to be applied to a List or array, but that value cannot be converted to an integer.
        at org.apache.commons.el.Logger.logError(Logger.java:481)
        at org.apache.commons.el.Logger.logError(Logger.java:498)
        at org.apache.commons.el.Logger.logError(Logger.java:566)
        at org.apache.commons.el.ArraySuffix.evaluate(ArraySuffix.java:227)
        at org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
        at org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:263)
        at org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:190)
        at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:920)
        at org.apache.jsp.pages.gruposLista_jsp._jspx_meth_c_out_0(gruposLista_jsp.java:237)
        at org.apache.jsp.pages.gruposLista_jsp._jspx_meth_c_forEach_0(gruposLista_jsp.java:206)
        at org.apache.jsp.pages.gruposLista_jsp._jspService(gruposLista_jsp.java:123)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:825)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:738)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:526)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:534)

Parecem dois erros diferentes, mas já pesquisei em vários lugares e aparentemente a forma que estou fazendo está correta, então penso que TALVEZ eles tenham a mesma causa. Se forem duas barbeiragens, por favor me desculpem.

Os dados estão retornando corretamente: olho no log do hibernate e consigo ver que ele retorna 27 rows. Inclusive, se usando c:forEach eu fizer um varStatus=“status” e depois pedir status.count, ele me retorna corretamente até o numero 27. Ou seja, meus dados tão chegando lá, só que tem algo emperrando na hora de mostrar.

Agradeço qualquer ajuda. Se for necessária mais informação, só dizer.

Valeu

35 Respostas

M

pq vc colocou isto na tua jsp?

<%
        List gruposList = GruposService.getInstance().getGruposList();
        request.setAttribute("grupos", gruposList);
  %>

NUNCA!!!
Nunca coloque scriplet na tua jsp.

Vc deve fazer assim:

Crie um action e coloque este pedaço de codigo nela e redirecione pra tua jsp.

Um exemplo…

public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws Exception {
		List lista = new GruposService.getGruposList();
		req.setAttribute("grupos", lista);
	return map.findForward("ok");

Aí da certo…

M

Tem um espaço esquisito entre o “<c” e o “:out…” dentro do forEach, tire o espaço.

Outra coisa, porque em vez de usar ><c:out/> você não simplesmente coloca ${item.propriedade}?

M

Marcelo,

:shock: Desculpe
Na verdade eu coloquei só pra testar, pretendia mudar depois… pq era pra ter funcionado daquele jeito, não era? De qualquer forma, acabei de efetuar a mudança.

Criei uma ação de nome ListaGruposAction.java da seguinte forma:

public class ListaGruposAction extends Action {
	public ActionForward execute (
		ActionMapping mapping,
		ActionForm form,
		HttpServletRequest request,
		HttpServletResponse response) throws Exception {
            
                List lista = GruposService.getInstance().getGruposList();
 		request.setAttribute("grupos", lista);
                return mapping.findForward("ok");
	}       
    
}

E do meu jsp tirei o scriplet feio :oops: e ficou assim:

<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
 <%@ taglib uri="/tags/struts-html" prefix="html" %>
 <%@ taglib uri="/tags/struts-logic" prefix="logic" %>
 <%@ page import="auge.conexao.GruposService" %>
 <%@ page import="java.util.List" %>
 
 <html:html locale="true">
 <head>
    <title>Listagem de Grupos</title>
    <html:base/>
 </head>
 <body bgcolor="white">
 
    <html:errors/>
 
    <table border=1>
    <tr>
       <td>Grupo</td> 
       <td>Descrição</td>	
    </tr>
     <logic:iterate id="element" name="grupos"  scope="request" type="auge.bean.Grupos" >
     <tr>
        <td><bean:write name="element" property="grupo" /></td>    
        <td><bean:write name="element" property="descricao" /></td>	
     </tr>
     </logic:iterate>    

    </table>   
 <p>
 <html:link action="/Grupos.do">Voltar</html:link>
 </body>
 </html:html>

O erro mudou! (erro mudar eu sempre acho lucro… hehe…) agora recebo:

javax.servlet.ServletException: Cannot find bean grupos in scope request
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
	org.apache.jsp.pages.gruposLista_jsp._jspService(gruposLista_jsp.java:179)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
	org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
	org.apache.struts.action.RequestProcessor.internalModuleRelativeForward(RequestProcessor.java:1001)
	org.apache.struts.tiles.TilesRequestProcessor.internalModuleRelativeForward(TilesRequestProcessor.java:345)
	org.apache.struts.action.RequestProcessor.processForward(RequestProcessor.java:560)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:209)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362

Imagino que este erro seja pq preciso “pegar” o parametro que setei. Tentei fazer um getAttribute, mas deu na mesma. Mas o scope=“request”… basta pra isso?

Maurício, o espaço entre o c e o :out acabou saindo pq me confundi de fórum… hehehe… em outro fórum, isso dá um smileyzinho e eu não queria que ele aparecesse, então coloquei. Na verdade o espaço não está lá não, foi só pra postar. Quanto a colocar só o ${item.propriedade}… acabei de tentar aqui e deu exatamente a mesma coisa do c:out. O engraçado é que se eu mudar um pouco mais (em se tratando dessa solução usando JSTL) e fizer algo tipo:

<c:forEach var="descricao" items="${gruposLista}">
     <tr>
        <td><c:out value="${descricao}" /></td>           
     </tr>   
     </c:forEach>

Ele me dá tipo o endereço do Objeto… algo tipo Llang.java.Object@blablabla… e me dá isso 27 vezes (o número de rows hehe)

Muito obrigada pela ajuda e atenção de vcs.

M

Oxe, se ele tá dando essa coisa doida (que é o toString() de Object) é porque ele tá pegando tudo certinho.

Será que os nomes das propriedades que você declarou estão corretas?

Coloca um <c:out/> aí com ${descricao.class} pra ver o que ele tá trazendo.

E mais uma coisa, não use <c:out/> é feio que dói :mrgreen:

M

tente assim

<c:forEach var="id" items="${grupos}">
      <tr>
         <td>${id.grupo}</td>           
         <td>${id.descricao}</td>           
      </tr>   
</c:forEach>

vc colocou a chave grupos para a lista no seu request.
para isto, vc tem q pegar grupos em items e naum gruposLista

M

Eita, eu sabia que o scriplet era do mal, mas do c:out eu não sabia não… Curiosidade, pq não ele? De qualquer forma, c:out está fora da minha vida agora :mrgreen:

Pedindo o descricao.class, ele me dá uma exceção por causa do pontinho:

exception

javax.servlet.ServletException: The "." operator was supplied with an index value of type "java.lang.String" to be applied to a List or array, but that value cannot be converted to an integer.
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
	org.apache.jsp.pages.gruposLista_jsp._jspService(gruposLista_jsp.java:148)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

root cause

javax.servlet.jsp.el.ELException: The "." operator was supplied with an index value of type "java.lang.String" to be applied to a List or array, but that value cannot be converted to an integer.
	org.apache.commons.el.Logger.logError(Logger.java:481)
	org.apache.commons.el.Logger.logError(Logger.java:498)
	org.apache.commons.el.Logger.logError(Logger.java:566)
	org.apache.commons.el.ArraySuffix.evaluate(ArraySuffix.java:227)
	org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
	org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:263)
	org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:190)
	org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:920)
	org.apache.jsp.pages.gruposLista_jsp._jspx_meth_c_out_1(gruposLista_jsp.java:254)
	org.apache.jsp.pages.gruposLista_jsp._jspx_meth_c_forEach_0(gruposLista_jsp.java:207)
	org.apache.jsp.pages.gruposLista_jsp._jspService(gruposLista_jsp.java:122)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

Ehhhh… ele não gosta do pontinho.

M

Não é que seja do mal, é desnecessário.

Mas a coisa tá preta mesmo viu, num sai nada daí!

M

Funcionou?

M

Marcelo, desculpe não ter te respondido ontem, é que aqui qdo termina o expediente o povo te põe pra fora a pontapés :mrgreen:

O jeito que vc falou deu o mesmo erro do pontinho:

exception

javax.servlet.ServletException: The "." operator was supplied with an index value of type "java.lang.String" to be applied to a List or array, but that value cannot be converted to an integer.
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
	org.apache.jsp.pages.gruposLista_jsp._jspService(gruposLista_jsp.java:145)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

root cause

javax.servlet.jsp.el.ELException: The "." operator was supplied with an index value of type "java.lang.String" to be applied to a List or array, but that value cannot be converted to an integer.
	org.apache.commons.el.Logger.logError(Logger.java:481)
	org.apache.commons.el.Logger.logError(Logger.java:498)
	org.apache.commons.el.Logger.logError(Logger.java:566)
	org.apache.commons.el.ArraySuffix.evaluate(ArraySuffix.java:227)
	org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
	org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:263)
	org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:190)
	org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:920)
	org.apache.jsp.pages.gruposLista_jsp._jspx_meth_c_forEach_0(gruposLista_jsp.java:200)
	org.apache.jsp.pages.gruposLista_jsp._jspService(gruposLista_jsp.java:120)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

Tá dizendo que o valor nao pode ser convertido pra inteiro… mas pra que ele quer converter pra inteiro?

M

muito estranho…

faz assim, posta todo seu codigo aí… (action, form, modelo, struts-config) pra gente dar uma olhada…

Muito estranho mesmo…

M

Tou ajeitando aqui pra postar… mas vem cá, o tipo do List devia me mostrar o que? pq eu tou supondo que seja um list de objetos Grupos, mas qdo eu faço:

Object obj = gruposList.get(0);
        out.println("GruposList:" + obj.getClass());

Ele me retorna: Ljava.lang.Object

E qdo eu peço o valor de obj (usando esse teste que fiz acima) ele retorna Ljava.lang.Object;@191f022

será q é o tipo de objeto q tá errado?

M

Totalmente!

Será que o erro não é na query do Hibernate? Você tem alguma classe use mapeamento de herança?

M

Kkkkkkkkkkkkkkkkk!

Ponto, achei o erro, você colocou um select na query do Hibernate!

Tira ele de lá, deixa só a partir do From.

M

E mais uma coisa, essa query deveria ser uma named query, definida lá no seu arquivo de mapeamento, já que ela é estática. Ela vai rodar bem mais rápido.

M

:oops: :oops: Hum, eu tinha entendido errado então. Tinha entendido que o Select pro Hibernate seria algo meio que opcional, parece que já vi alguns exemplos usando. Mas de qualquer forma, alterei pra:

Query query =
                    session.createQuery(
                    "from auge.bean.Grupos gp order by gp.descricao");
            return query.list();

Agora sim, fez diferença. Mas ainda não mostrou os dados (nem com evil c:out nem sem ele)… eles estão vindo em branco hehe. Olho o código fonte da página gerada e vejo que a tabela vem com 27 linhas em branco!

Bom, parece que a metade do problema está resolvido, vou ver se acho algo aqui que possa dizer pq os dados estão vindo em branco, mesmo qdo ele consegue contar qtas linhas tem hehe…

M

Faz um scriptlet que pegue e escreva os valores.

M

Fiz um scriplet assim:

<%
        List gruposList = GruposService.getInstance().getGruposList();
        request.setAttribute("gruposLista", gruposList);
        Iterator iterator = gruposList.iterator();        
        while (iterator.hasNext()) {
            Object elem = iterator.next();
            if (elem == null)
                 elem = "";
        %>
        <br> <%= elem %> 
<%
    }
%>

E ele me escreveu 27 tags
no código fonte da página gerada… hehehhehe…

M

Tenta dar um getClass() nesses objetos pra ver são mesmo os objetos Grupo.

M

Estou tentando fazer isso a alguns minutos, mas até nisso dá problema. Te contar viu. O mesmo código de getClass que funcionava anteriormente (e até postei os resultados aqui) não funciona agora. Dá uma exceção:

exception

org.apache.jasper.JasperException
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

root cause

java.lang.NullPointerException
	org.apache.jsp.pages.gruposLista_jsp._jspService(gruposLista_jsp.java:113)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

E no arquivo Java gerado para o JSP, na linha 113 (q ele indica no erro) tenho exatamente isso:

out.println("Groups list has objects of type " + obj.getClass());

E tava olhando aqui… no log do hibernate, a consulta mostra o seguinte:

2005-08-09 11:04:43,883 DEBUG hibernate.jdbc.AbstractBatcher  -> about to open ResultSet (open ResultSets: 0, globally: 0)
2005-08-09 11:04:43,886 DEBUG hibernate.loader.Loader  -> processing result set
2005-08-09 11:04:43,888 DEBUG hibernate.loader.Loader  -> result set row: 0
2005-08-09 11:04:43,889 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,889 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,890 DEBUG hibernate.loader.Loader  -> result set row: 1
2005-08-09 11:04:43,890 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,890 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,890 DEBUG hibernate.loader.Loader  -> result set row: 2
2005-08-09 11:04:43,890 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,890 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,890 DEBUG hibernate.loader.Loader  -> result set row: 3
2005-08-09 11:04:43,890 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,891 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,891 DEBUG hibernate.loader.Loader  -> result set row: 4
2005-08-09 11:04:43,891 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,891 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,891 DEBUG hibernate.loader.Loader  -> result set row: 5
2005-08-09 11:04:43,891 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,891 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,891 DEBUG hibernate.loader.Loader  -> result set row: 6
2005-08-09 11:04:43,891 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,891 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,891 DEBUG hibernate.loader.Loader  -> result set row: 7
2005-08-09 11:04:43,891 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,892 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,892 DEBUG hibernate.loader.Loader  -> result set row: 8
2005-08-09 11:04:43,892 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,892 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,892 DEBUG hibernate.loader.Loader  -> result set row: 9
2005-08-09 11:04:43,892 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,892 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,892 DEBUG hibernate.loader.Loader  -> result set row: 10
2005-08-09 11:04:43,892 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,892 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,892 DEBUG hibernate.loader.Loader  -> result set row: 11
2005-08-09 11:04:43,892 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,892 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,892 DEBUG hibernate.loader.Loader  -> result set row: 12
2005-08-09 11:04:43,893 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,893 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,893 DEBUG hibernate.loader.Loader  -> result set row: 13
2005-08-09 11:04:43,893 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,893 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,893 DEBUG hibernate.loader.Loader  -> result set row: 14
2005-08-09 11:04:43,895 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,895 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,895 DEBUG hibernate.loader.Loader  -> result set row: 15
2005-08-09 11:04:43,895 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,895 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,895 DEBUG hibernate.loader.Loader  -> result set row: 16
2005-08-09 11:04:43,896 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,896 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,896 DEBUG hibernate.loader.Loader  -> result set row: 17
2005-08-09 11:04:43,896 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,896 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,896 DEBUG hibernate.loader.Loader  -> result set row: 18
2005-08-09 11:04:43,896 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,896 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,896 DEBUG hibernate.loader.Loader  -> result set row: 19
2005-08-09 11:04:43,896 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,896 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,896 DEBUG hibernate.loader.Loader  -> result set row: 20
2005-08-09 11:04:43,896 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,896 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,897 DEBUG hibernate.loader.Loader  -> result set row: 21
2005-08-09 11:04:43,897 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,897 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,897 DEBUG hibernate.loader.Loader  -> result set row: 22
2005-08-09 11:04:43,897 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,897 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,897 DEBUG hibernate.loader.Loader  -> result set row: 23
2005-08-09 11:04:43,897 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,897 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,897 DEBUG hibernate.loader.Loader  -> result set row: 24
2005-08-09 11:04:43,897 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,897 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,897 DEBUG hibernate.loader.Loader  -> result set row: 25
2005-08-09 11:04:43,898 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,898 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,898 DEBUG hibernate.loader.Loader  -> result set row: 26
2005-08-09 11:04:43,898 DEBUG hibernate.type.IntegerType  -> returning null as column: grupo
2005-08-09 11:04:43,898 DEBUG hibernate.loader.Loader  -> result row: null
2005-08-09 11:04:43,898 DEBUG hibernate.loader.Loader  -> done processing result set (27 rows)

Ou seja, o troço tá realmente retornando null… por isso obviamente não aparece nada. É estranho, pq qdo a query tava errada (com o select lá) nesse log aparecia os troços… eu via escrito os dados de descricao do grupo e tudo mais. Achei que era pq eu tinha especificado cada coluna. Engraçado aí é que ele só cita a column grupo, e não a descrição, apesar de mais acima no log eu ter que ele mapeou ambas:

2005-08-09 11:04:28,957 INFO  hibernate.cfg.Configuration  -> Mapping resource: auge/bean/Grupos.hbm.xml
2005-08-09 11:04:28,978 DEBUG hibernate.util.DTDEntityResolver  -> trying to locate http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd in classpath under org/hibernate/
2005-08-09 11:04:28,980 DEBUG hibernate.util.DTDEntityResolver  -> found http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd in classpath
2005-08-09 11:04:29,261 INFO  hibernate.cfg.HbmBinder  -> Mapping class: auge.bean.Grupos -> GRUPOS
2005-08-09 11:04:29,281 DEBUG hibernate.cfg.HbmBinder  -> Mapped property: grupo -> grupo
2005-08-09 11:04:29,321 DEBUG hibernate.cfg.HbmBinder  -> Mapped property: descricao -> descricao

Coisa estranha, não? Com certeza tem algo errado pro lado do hibernate.

M

Passando todos os arquivos, como o Marcelo sugeriu:

Bean - Grupos.Java:

package auge.bean;

import java.io.Serializable;

public class Grupos implements Serializable {
 
	private Integer grupo;
	private String descricao;
	 
	public Grupos() {
            
        }
        
	public Integer getGrupo() {
		return this.grupo;
	}
	 
	public String getDescricao() {
		return this.descricao;
	}
	 
	public void setGrupo(Integer grupo) {
            this.grupo = grupo;
	}
	 
	public void setDescricao(String descricao) {
            this.descricao = descricao;
	}
	 
}

ListaGruposAction.java:

package auge.action;

import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.hibernate.HibernateException;
import auge.conexao.GruposService;
import auge.bean.Grupos;
import auge.form.ListaGruposForm;

public class ListaGruposAction extends Action {
	public ActionForward execute (
		ActionMapping mapping,
		ActionForm form,
		HttpServletRequest request,
		HttpServletResponse response) throws Exception {
            
                List lista = GruposService.getInstance().getGruposList();
 		request.setAttribute("grupos", lista);
                return mapping.findForward("ok");
	}       
}

Método getGruposList, na classe GruposService.java:

public List getGruposList() {
        Session session = ConnectionFactory.getInstance().getSession();
        
        try {
            Query query =
                    session.createQuery(
                    "from auge.bean.Grupos gp order by gp.descricao");
            return query.list();
            
        } catch (HibernateException e) {
            System.err.println("Hibernate Exception" + e.getMessage());
            throw new RuntimeException(e);
        } finally {
            if (session != null) {
                try {
                    session.close();
                } catch (HibernateException e) {
                    System.err.println("Hibernate Exception" + e.getMessage());
                    throw new RuntimeException(e);
                }
                
            }
        }
    }

No struts-config.xml, tenho:

<form-beans>
      <form-bean name="listaGruposForm" type="auge.form.ListaGruposForm"/>
</form-beans>

e também:

<action
                path="/ListaGrupos"
                type="auge.action.ListaGruposAction"
                name="listaGruposForm" scope="request" validate="true"
                input="/pages/grupos.jsp"                
                forward="/pages/gruposLista.jsp"/>

grupos.jsp:

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>  
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>

<!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=UTF-8">
        <title>Grupos</title>
        
                
        <link rel="stylesheet" type="text/css" href="../config/estilos.css" />
        
        <html:base/>
        
    </head>
    <body>

    <span style="font-family:Sans-serif;">
    
    <table width="100%" align="center">
    <tr><td> Grupos </td></tr>
    <tr bgcolor="#000000"> <td></td></tr>
    </table>

    <br>

  <html:form action="/ListaGrupos" method="post" focus="descricao">  
      <table border="0" align="center">
         <tr><td width="50%">Grupo: </td><td width="50%"><html:text property="descricao" /></td></tr>      
         <tr><td width="50%" align="center"><html:submit value="Buscar"/> </td><td width="50%" align="center"><html:reset value="Limpar"/></td></tr>      
      </table><br/>
   </html:form>   
   
   
<br>
<html:errors/>      
    
    </span>
    </body>
</html>

Como podem perceber por esse arquivo, era pra escrever uma palavra e buscar o produto com nome parecido, mas nao implementei isso ainda (ou seja, nao espero que funcione desta forma, só o html está assim). Só o que devia fazer eh: ao escrever qq coisa no quadrinho e mandar buscar (assim ativando a action) ele trazer uma lista com todos, independente do nome.

gruposLista.jsp

<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
 <%@ taglib uri="/tags/struts-html" prefix="html" %>
 <%@ taglib uri="/tags/struts-logic" prefix="logic" %>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 <%@ page import="auge.conexao.GruposService" %>
 <%@ page import="java.util.*" %>
 
 <html:html locale="true">
 <head>
     <title>Listagem de Grupos</title>
     <html:base/>
 </head>
 <body bgcolor="white">
 
 
     <html:errors/>
<%--     <%
        List gruposList = GruposService.getInstance().getGruposList();
        request.setAttribute("gruposLista", gruposList);
        Iterator iterator = gruposList.iterator();        
        while (iterator.hasNext()) {
            Object elem = iterator.next();
            if (elem == null)
                 elem = "";
        %>
        <br> <%= elem %>
<%
    }
%>  --%>   
 
     <table border=1>
    
     <tr>
        <td>Grupo</td>
        <td>Descrição</td>   
     </tr>
     
     <logic:iterate id="element" name="grupos"  scope="request" type="auge.bean.Grupos" >
     <tr>
        <td><bean:write name="element" property="grupo" /></td>    
        <td><bean:write name="element" property="descricao" /></td>	
     </tr>
     </logic:iterate>     
     
     
<%-- 
     <c:forEach var="items" items="${grupos}">
       <tr>
          <td><c:out value="${items.grupo}" /></td>           
          <td><c:out value="${items.descricao}" /></td>           
       </tr>   
     </c:forEach>     
--%>    
     </table>   
 <p>
 <html:link action="/Grupos.do">Voltar</html:link>
 </body>
 </html:html>

Como podem ver nesse, tem mta coisa comentada hehehe… pq tentei de todos os jeitos, e de todos nada. O scriplet está comentado pra ver se funcionava com o action (jah q o scriplet tava saindo tudo em branco)… mas com a action e o logic-iterate tb nao dá certo, dá um erro dizendo “Cannot find bean grupos in scope request”…

Mas meu problema está bem antes disso, já que o hibernate estava retornando nulo no scriplet, onde ele devia retornar dados. Então coloco aqui também os arquivos do hibernate:

hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">org.firebirdsql.jdbc.FBDriver</property>
        <property name="connection.url">jdbc:firebirdsql:127.0.0.1/3050:/E/BD/auge.gdb</property>
        <property name="connection.username">sysdba</property>
        <property name="connection.password">senha</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.FirebirdDialect</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">update</property>

        <mapping resource="auge/bean/Grupos.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

log4j.properties: (este peguei aqui no GUJ mesmo, se não me engano foi até o Maurício q tinha passado pra outra pessoa)

log4j.rootLogger=DEBUG, dest1, dest2

log4j.appender.dest1=org.apache.log4j.ConsoleAppender
log4j.appender.dest1.layout=org.apache.log4j.PatternLayout
log4j.appender.dest1.layout.ConversionPattern=%d %-5p %-5c{3} %x -> %m%n

log4j.appender.dest2=org.apache.log4j.RollingFileAppender
log4j.appender.dest2.File=hibernate3.log
log4j.appender.dest2.layout=org.apache.log4j.PatternLayout
log4j.appender.dest2.layout.ConversionPattern=%-5c{2} %x -> %m%n

#log4j.appender.dest2.MaxFileSize=100KB
# Keep one backup file
#log4j.appender.dest2.MaxBackupIndex=3

#log4j.appender.dest2.layout=org.apache.log4j.PatternLayout
#log4j.appender.dest2.layout.ConversionPattern=%d [%t] %-5p %-5c{3}(%L) %x -> %m%n

Não tenho um arquivo hibernate.properties pq entendo que o hibernate.cfg.xml acaba com a necessidade dele… certo?

E por ultimo, Grupos.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" 
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 
<hibernate-mapping>
   <class name="auge.bean.Grupos" table="GRUPOS" >
         <id name="grupo" column="grupo" type="java.lang.Integer"> 
             <generator class="assigned"/> 
         </id> 
      <property name="descricao" column="descricao" type="java.lang.String" />
   </class>
</hibernate-mapping>

Bom, acho que é só isso que tenho de informação que seja relevante… e não é pouco hehehehe… continuo contando com a ajuda de vcs pra resolver. T+

M

É, o problema está mesmo no tipo que o hibernate está me retornando. Acontece o seguinte: quando eu coloco minha query igual a “select gp.grupo, gp.descricao from auge.bean.Grupos gp order by gp.descricao”, ela me retorna dados. Quando eu coloco sem o select, tipo: “from auge.bean.Grupos” (o mais simples possivel), ela me retorna apenas nulos.

Tanto que, se faço a query da primeira forma, e tento imprimir assim:

<c:forEach var="items" items="${gruposLista}">
       <tr>
          <td><c:out value="${items[0]}" /></td>           
          <td><c:out value="${items[1]}" /></td>                     
       </tr>   
     </c:forEach>

… em items[1] ele me imprime, corretamente, o valor de todos os 27 itens da segunda coluna. Mas em items[0] não me imprime nada. Acredito qe seja por esse problema do metodo nao retornar o tipo correto.

Tem algum casting que eu poderia fazer no meu metodo pra ele retornar certo? Ele está agora como abaixo:

public List getGruposList() {
        Session session = ConnectionFactory.getInstance().getSession();
        
        try {
            Query query =
                    session.createQuery(
                    "select gp.grupo, gp.descricao from auge.bean.Grupos gp order by gp.descricao");
            return query.list();
            
        } catch (HibernateException e) {
            System.err.println("Hibernate Exception" + e.getMessage());
            throw new RuntimeException(e);
        } finally {
            if (session != null) {
                try {
                    session.close();
                } catch (HibernateException e) {
                    System.err.println("Hibernate Exception" + e.getMessage());
                    throw new RuntimeException(e);
                }
                
            }
        }
    }

Quando tento fazer o casting no JSP, ele me dá um ClassCastException, o que me faz pensar que não vai adiantar tentar fazer cast. O que eu preciso é que o hibernate, com a query daquele jeito (q é o correto) me retorne os dados. O que há de errado?

Mais uma vez agradeço, não vou desistir por agora.

M

Olha, o primeiro você pode fazer um cast pra Integer, tenta aí pra ver no que vai dar.

M

O cast que eu tou fazendo é só pra ver se funciona, então estou fazendo dessa forma:

<%
         List gruposList = GruposService.getInstance().getGruposList();
         request.setAttribute("gruposLista", gruposList);
       Iterator iterator = gruposList.iterator();        
         while (iterator.hasNext()) {
             Object elem = iterator.next();
             elem = (Integer) elem;
             if (elem == null)
                  elem = "";
         %>
         <br> <%= elem %>
 <%
     }
 %>

Já fiz esse cast com Integer (como está aí), String, e o próprio Grupos, e tudo me dá ClassCastException.
Tentei também trocar o “Object elem = iterator.next();” por “Grupos elem = iterator.next();”, mas aí me dá incompatible types.

Mas lembrando que isso tudo é com a query daquele jeito, com “select” na frente e especificando os atributos. Pq será q nao funciona do jeito certo?

Valeu

M

Do jeito que você tá fazendo não funciona mesmo não, ele não está retornando um objeto, mas sim uma lista de Arrays de duas posições, onde a posição “0” é um inteiro e a posição “1” é um String.

M

É por causa da minha função que retorna o List? O tipo do valor de retorno tá errado? qual deveria ser?

M

Nops, o erro está no Iterator, ele retorna um array de Objects, não um Object.

M

Acho que estou cutucando do lado errado o tempo inteiro. Minha pergunta não deveria ser quanto ao casting do objeto, e sim porque o hibernate está retornando nulo (usando o hql correto) quando ele obviamente enxerga meus dados.

Já tentei das seguintes formas:

Query query =  session.createQuery("from Grupos").list();
 return query.list();
List gps = session.createQuery("from Grupos as grupos ").list();
 return gps;
List gps = session.createCriteria( Grupos.class ).list();
 return gps;

Todas me retornam 27 rows com o valor nulo. Elas enxergam meus dados, porém não conseguem trazê-los. O que justificaria isso?

M

Vamos pra macumba então :lol:

Muda o atributo chave de Grupos de “grupo” pra “id” e ajeita os get/set e o arquivo de mapeamento (não mude na tabela ainda) e veja no que vai dar.

M

Peraí! Peraí! Peraí!

Ele retornou a coluna grupo sempre “null” e se ele retornou null não tem valor nenhum lá e você colocou a colula como assigned (coisa perigosa). Você tem certeza que essas chaves não estão todas nulas?

M

certeza… inclusive o campo “grupo” no banco está marcado como not null! A descricao, essa sim poderia estar nula…

Qto ao assigned… ele significa que meu id nao vai ser gerado, vai ser atribuido… certo?

Vou testar a macumba aqui :mrgreen:

M

Eh, a macumba não funcionou.

Dando uma olhada melhor na minha tabela, percebi o seguinte: apesar do campo grupo estar marcado como not-null, ele não estava marcado como chave. Sendo assim, alguns valores estavam repetidos. Não havia realmente nada nulo. Daí, achando que era a repetição o problema, limpei a tabela pra teste e inseri 3 linhas, sem nulos e sem repetição. Também não deu certo. Daí achei que era porque no arquivo de configuracao da classe, ela estava marcada como ID e ele procuraria uma chave. Então tirei do ID e coloquei como property, e tb não fez diferença. Só o que me restaria fazer pra testar era colocar como primary key, mas o chefe disse que nao posso fazer isso :cry:

Será este o problema? Será que tem como funcionar sem ser primary key?

Agradeço, pela milésima vez.

M

É pouco provável, mas talvez seja.

Faz um teste aí nas escondidas :roll:

M

Não resolveu. Bom, não vejo outra alternativa que não seja tentar fazer essa parte do zero vendo se acho um erro. Vc vê?

M

O que eu acho estranho é o Hibernate não estar conseguindo carregar essa propriedade, tá tudo mapeado direitinho e sem “problemas”…

Tenta mudar o tipo do generator ID pra “increment” e faz uns testes aí, se num der em nada faz denovo (talvez sem o Struts :roll: ).

:mrgreen:

(larguei ele geral :lol: )

M

Problema resolvido! Como?

Deixei o hibernate.cfg.xml só pro mapeamento, e setei o resto das coisas tudo no hibernate.properties. Parece que ele prefere assim.

Sei não, mas se o Hibernate continuar a ser genioso assim vou fazer um bannerzinho dizendo que quem usa ele mata um ursinho polar por dia :mrgreen:

Obrigada a todos que ajudaram :smiley:

Criado 8 de agosto de 2005
Ultima resposta 11 de ago. de 2005
Respostas 35
Participantes 3