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