Imprimir um atributo que esta duplamente encapsulado

4 respostas
Cocota

Olá galera,

Inicialização: Uso Struts, quero mostrar um atributo numa JSP.

Tô com um probleminha que parece fácil.

Tenho uma collection de Pessoas (Objeto Pessoa). Cada pessoa tem um Objeto Endereco, e cada endereco tem um atributo nomeRua.

quero imprimir esse atributo numa JSP usando as taglibs do Struts.

Alguem me ajuda?

4 Respostas

Mauricio_Linhares

Porque você não simplesmente usa Expression Language?

${pessoa.endereco.nomeRua}

Cocota

Blz Maurício.

Sei que o struts vai encontrar esse objeto pessoa porque ele procura em todos os escopos. Mas usando EL eu tenho que definir o scopo né?

A lista de pessoas está no requestScope.

Usando EL e taglib core eu faria

<c:forEach items="${requestScope.lista}" var="pessoa">
   <c:out value="${pessoa.endereco.nomeRua}" />
</c:forEach>

eu posso botar EL nas tags do Struts?

tipo:

/* laço que pega a lista 
 * <logic:iterate>
 */

<bean:write property="${pessoa.endereco.nomeRua}" />

/* fim laço */
Cocota

Opa,

Cheguei em casa, testei a idéia com EL e deu erro!
Vou mostrar o código da JSP e o Erro.

Código JSP

<%@ page isELIgnored="false" %>
{...}
<logic:iterate id="projeto" name="projetos">
  <tr>
    <td>
	<bean:write name="projeto" property="titulo" />
    </td>
    <td>
	<bean:write name="projeto" property="objetivoGeral" />
   </td>
    <td>
                <bean:write name="projeto" property="${projeto.responsavel.nome}" />
//eu tentei <bean:write name="projeto" property="${responsavel.nome}" />
    </td>
  </tr>
</logic:iterate>

Erro:

exception 

javax.servlet.ServletException: javax.servlet.jsp.el.ELException: An error occurred while getting property "nome" from an instance of class br.rn.cefet.nudes.modelo.vo.Responsavel$$EnhancerByCGLIB$$df6a71b1
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:844)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
	org.apache.jsp.WEB_002dINF.jsp.projeto.listar_jsp._jspService(listar_jsp.java:253)
	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:322)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
	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.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)


root cause 

org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
	org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:53)
	org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:84)
	org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:134)
	br.rn.cefet.nudes.modelo.vo.Responsavel$$EnhancerByCGLIB$$df6a71b1.getNome(<generated>)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:585)
	org.apache.commons.el.ArraySuffix.evaluate(ArraySuffix.java:314)
	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:922)
	org.apache.jsp.WEB_002dINF.jsp.projeto.listar_jsp._jspx_meth_bean_write_2(listar_jsp.java:318)
	org.apache.jsp.WEB_002dINF.jsp.projeto.listar_jsp._jspService(listar_jsp.java:166)
	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:322)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
	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.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

Hmm…?

Cocota

Resolvi e vim compartilhar.

Usei somente as Taglibs do Struts sem EL.

Quando percebi que o problema era o Hibernate… Faltou definir outer-join=“true” no arquivo de mapeamento .hbm.xml pois o objeto não estava trazendo o outro.

Graças ao documento escrito por Maurício Linhares onde ele fala sobre lazy-loading no artigo Introdução ao Hibernate 3.

Vlw

Criado 8 de abril de 2006
Ultima resposta 14 de abr. de 2006
Respostas 4
Participantes 2