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