Using subTable to display data from Vector<Vector>
rubenrjorge May 7, 2009 4:05 AMHello everyone,
I'm new to JSF and RichFaces and I'm trying to create a table (rich:dataTable) from data structures in my backing bean. I've already managed to create the headers using rich:columnGroup and now I want to display the actual data using rich:subTable.
My subTable is defined as follows:
<rich:subTable value="#{TaskListBean.main}" var="data"> <!-- first 3 values --> <rich:columns value="#{data.rowList}" var="singleCellData"> <h:outputText value="#{singleCellData.headerName}" /> </rich:columns> </rich:subTable>
I have 3 Java files, TaskListBean is the backing bean:
public class TaskListBean { private Vector<RowData> main; public Vector<RowData> getMain() { main = new Vector<RowData>(); RowData data1 = new RowData(); main.add(data1); main.add(data1); main.add(data1); main.add(data1); return main; } }
RowData is:
public class RowData { private Vector<HeadersData> rowList; public RowData() { this.rowList = new Vector<HeadersData>(); HeadersData data3 = new HeadersData(); data3.setHeaderName("Data s1"); HeadersData data4 = new HeadersData(); data4.setHeaderName("Data s2"); HeadersData data5 = new HeadersData(); data5.setHeaderName("Data s3"); this.rowList.add(data3); this.rowList.add(data4); this.rowList.add(data5); this.rowList.add(data3); this.rowList.add(data4); this.rowList.add(data5); } public Vector<HeadersData> getRowList() { return rowList; } }
And finally HeadersData which has the property I want to display in each of the table cells:
public class HeadersData { private String headerName; public String getHeaderName() { return headerName; }
If I try to run my JSP file I get the following error:
Error 500--Internal Server Error javax.servlet.jsp.JspTagException: FOREACH_BAD_ITEMS at org.richfaces.iterator.SimpleForEachIterator.toForEachIterator(SimpleForEachIterator.java:135) at org.richfaces.iterator.SimpleForEachIterator.supportedTypeForEachIterator(SimpleForEachIterator.java:98) at org.richfaces.taglib.ColumnsTag.prepare(ColumnsTag.java:539) at org.richfaces.taglib.ColumnsTag.doStartTag(ColumnsTag.java:299) at jsp_servlet.__table3._jsp__tag33(__table3.java:1731) at jsp_servlet.__table3._jsp__tag32(__table3.java:1691) at jsp_servlet.__table3._jsp__tag22(__table3.java:1220) at jsp_servlet.__table3._jsp__tag21(__table3.java:1161) at jsp_servlet.__table3._jspService(__table3.java:350) at weblogic.servlet.jsp.JspBase.service(JspBase.java:34) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175) at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:502) at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:251) at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:415) at com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:475) at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:143) at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100) at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292) at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42) at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178) at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368) at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42) at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3496) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(Unknown Source) at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2180) at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2086) at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1406) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201) at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
Any ideas on why this is happening or any workarounds to display the information?
Thanks in advance,
~Ruben