Can you use the dataExporter if your p:dataTable uses p:columns NOT p:column? I am getting empty files for all(pdf,xls,csv and xml) Since all my tables come from a database, I don't really know the number of columns or labels for columns so I put them in an ArrayList<ArrayList<Strings>>, both labels and data see code below:
<h:commandLink>
<p:graphicImage value="/resources/css/styleImages/excel.png" />
<p:dataExporter type="xls" target="siteList" fileName="uvbNetwork" />
</h:commandLink>
<p>
<p:dataTable paginator="false" dynamic="true" rendered="#{!empty(networkSiteList.siteTable.uvbData)}" id="siteList"
value="#{networkSiteList.siteTable.uvbData}" var="oneRow" style="width:850px;overflow:auto;padding: 0px 1px 0px 1px;" >
<p:columns value="#{networkSiteList.siteTable.uvbDataLabels}" var="colLabs" columnIndexVar="ind" >
<f:facet name="header">
<h:outputText value="#{colLabs}" style="font-size: 108%;font-weight: bold;color:#00703e;"/>
</f:facet>
<h:outputText value="#{oneRow[ind]}" />
</p:columns>
</p:dataTable></p>
Is my dataTable confusing dataExporter? I am using Itext 1.4.8 and Poi 3.2 along with Tomcat 6.0, Myfaces 2.0 and templates.
Thanks
Becky
dataExporter and p:columns
-
- Prime
- Posts: 18616
- Joined: 05 Jan 2009, 00:21
- Location: Cybertron
- Contact:
Not supported yet, there is a feature request in our tracker you can vote.
This is my implementation for the solution.
Code: Select all
public void export(List<List<String>> data, List<String> columnsHeaders) {
if (data.isEmpty()) {
return;
}
int index = 0;
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("someName");
HSSFRow row = sheet.createRow(index);
for (int i = 0; i < columnsHeaders.size(); i ++) {
HSSFCell cell = row.createCell(i);
cell.setCellValue(new HSSFRichTextString(columnsHeaders.get(i)));
}
Iterator it = data.iterator();
while (it.hasNext()) {
index ++;
row = sheet.createRow(index);
List<String> rowData = (List<String>) it.next();
for (int i = 0; i < rowData.size(); i ++) {
HSSFCell cell = row.createCell(i);
cell.setCellValue(new HSSFRichTextString(rowData.get(i)));
}
}
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) FacesContext
.getCurrentInstance().getExternalContext().getResponse();
response.setHeader("Content-Disposition", "attachment;filename=someName.xls");
response.setContentLength(workbook.getBytes().length);
response.setContentType("application/vnd.ms-excel");
try {
response.getOutputStream().write(workbook.getBytes());
response.getOutputStream().flush();
response.getOutputStream().close();
context.responseComplete();
} catch (IOException ex) {
// Do some
}
}
NetBeans 7.1
Mojarra-2.1.7
PrimeFaces-3.0.1
Tomcat 7.0.22
Mojarra-2.1.7
PrimeFaces-3.0.1
Tomcat 7.0.22
This problem has come back in release 10 of PrimeFaces. Exporting of p:columns was ok on pf 8 for this example.
Everything else on the table is perfect: sorting, filtering, pagination, etc..
<p:dataTable id="tbl" var="dataRow" value="#{bOMImportExportViewBean.bomDataList}"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {Exporters}"
draggableColumns="true" draggableRows="true" rows="10"
paginator="true"
style="margin-bottom:20px; max-width: 90%; max-height: 90%;"
stripedRows="true" showGridlines="true">
<f:facet name="{Exporters}">
<h:commandLink>
<p:graphicImage style="float: right;" name="/images/csv.png" width="24"/>
<p:dataExporter type="csv" target="tbl" fileName="bomData"/>
</h:commandLink>
<h:commandLink>
<p:graphicImage style="float: right;" name="/images/xml.png" width="24"/>
<p:dataExporter type="xml" target="tbl" fileName="bomData" />
</h:commandLink>
</f:facet>
<f:facet name="header">
BOM Data (#{bOMImportExportViewBean.bomDataList.size()} Entries) for #{bOMImportExportViewBean.dbEWIBean.name.concat(" Version ".concat(bOMImportExportViewBean.dbEWIBean.version))}
</f:facet>
<p:columns var="col" value="#{bOMImportExportViewBean.bomColumnList}" columnIndexVar="colIndex" width="100"
sortBy="#{dataRow.get(colIndex).getDataValue()}" filterBy="#{dataRow.get(colIndex).getDataValue()}"
field="#{col}">
<f:facet name="header">
<h:outputText value="#{col.columnHeading}" />
</f:facet>
<p:outputLabel value="#{dataRow.get(colIndex).getDataValue()}" />
</p:columns>
</p:dataTable>
Now exporting only produces a exception on the first column that has a column heading of 'Find'
StandardWrapperValve[Faces Servlet]: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NumberFormatException: For input string: "Find"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at javax.el.ListELResolver.toInteger(ListELResolver.java:329)
at javax.el.ListELResolver.getValue(ListELResolver.java:146)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:156)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:184)
at com.sun.el.parser.AstValue.getValue(AstValue.java:114)
at com.sun.el.parser.AstValue.getValue(AstValue.java:177)
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:183)
at org.jboss.weld.module.web.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
at org.primefaces.component.api.UITable.getConvertedFieldValue(UITable.java:563)
at org.primefaces.component.datatable.export.DataTableCSVExporter.addColumnValue(DataTableCSVExporter.java:212)
at org.primefaces.component.datatable.export.DataTableCSVExporter.exportCells(DataTableCSVExporter.java:162)
at org.primefaces.component.datatable.export.DataTableExporter.exportRow(DataTableExporter.java:253)
at org.primefaces.component.datatable.export.DataTableExporter.exportAll(DataTableExporter.java:238)
at org.primefaces.component.datatable.export.DataTableCSVExporter.doExport(DataTableCSVExporter.java:76)
at org.primefaces.component.datatable.export.DataTableExporter$DataTableVisitCallBack.visit(DataTableExporter.java:357)
at com.sun.faces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:127)
at org.primefaces.component.api.UIData.visitTree(UIData.java:683)
at org.primefaces.component.datatable.export.DataTableExporter$DataTableVisitCallBack.lambda$invoke$0(DataTableExporter.java:376)
at org.primefaces.util.ComponentUtils.invokeOnClosestIteratorParent(ComponentUtils.java:539)
at org.primefaces.component.datatable.export.DataTableExporter$DataTableVisitCallBack.invoke(DataTableExporter.java:374)
at org.primefaces.component.datatable.export.DataTableExporter.export(DataTableExporter.java:318)
at org.primefaces.component.export.DataExporter.processAction(DataExporter.java:157)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:72)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:490)
at javax.faces.component.UICommand.broadcast(UICommand.java:211)
at javax.faces.component.UIData.broadcast(UIData.java:1127)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:847)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1396)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:58)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:76)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:177)
at javax.faces.webapp.FacesServlet.executeLifecyle(FacesServlet.java:707)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:451)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1636)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:331)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211)
at org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(TyrusServletFilter.java:282)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:253)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:257)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:757)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:577)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:158)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:371)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:238)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:520)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:217)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:182)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:156)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:218)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:95)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:260)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:177)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:109)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:88)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:53)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:524)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:89)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:94)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:33)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:114)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:569)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:549)
at java.base/java.lang.Thread.run(Thread.java:834)
|#]
without the following
sortBy="#{dataRow.get(colIndex).getDataValue()}" filterBy="#{dataRow.get(colIndex).getDataValue()}"
field="#{col}"
the export works
Everything else on the table is perfect: sorting, filtering, pagination, etc..
<p:dataTable id="tbl" var="dataRow" value="#{bOMImportExportViewBean.bomDataList}"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {Exporters}"
draggableColumns="true" draggableRows="true" rows="10"
paginator="true"
style="margin-bottom:20px; max-width: 90%; max-height: 90%;"
stripedRows="true" showGridlines="true">
<f:facet name="{Exporters}">
<h:commandLink>
<p:graphicImage style="float: right;" name="/images/csv.png" width="24"/>
<p:dataExporter type="csv" target="tbl" fileName="bomData"/>
</h:commandLink>
<h:commandLink>
<p:graphicImage style="float: right;" name="/images/xml.png" width="24"/>
<p:dataExporter type="xml" target="tbl" fileName="bomData" />
</h:commandLink>
</f:facet>
<f:facet name="header">
BOM Data (#{bOMImportExportViewBean.bomDataList.size()} Entries) for #{bOMImportExportViewBean.dbEWIBean.name.concat(" Version ".concat(bOMImportExportViewBean.dbEWIBean.version))}
</f:facet>
<p:columns var="col" value="#{bOMImportExportViewBean.bomColumnList}" columnIndexVar="colIndex" width="100"
sortBy="#{dataRow.get(colIndex).getDataValue()}" filterBy="#{dataRow.get(colIndex).getDataValue()}"
field="#{col}">
<f:facet name="header">
<h:outputText value="#{col.columnHeading}" />
</f:facet>
<p:outputLabel value="#{dataRow.get(colIndex).getDataValue()}" />
</p:columns>
</p:dataTable>
Now exporting only produces a exception on the first column that has a column heading of 'Find'
StandardWrapperValve[Faces Servlet]: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NumberFormatException: For input string: "Find"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at javax.el.ListELResolver.toInteger(ListELResolver.java:329)
at javax.el.ListELResolver.getValue(ListELResolver.java:146)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:156)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:184)
at com.sun.el.parser.AstValue.getValue(AstValue.java:114)
at com.sun.el.parser.AstValue.getValue(AstValue.java:177)
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:183)
at org.jboss.weld.module.web.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
at org.primefaces.component.api.UITable.getConvertedFieldValue(UITable.java:563)
at org.primefaces.component.datatable.export.DataTableCSVExporter.addColumnValue(DataTableCSVExporter.java:212)
at org.primefaces.component.datatable.export.DataTableCSVExporter.exportCells(DataTableCSVExporter.java:162)
at org.primefaces.component.datatable.export.DataTableExporter.exportRow(DataTableExporter.java:253)
at org.primefaces.component.datatable.export.DataTableExporter.exportAll(DataTableExporter.java:238)
at org.primefaces.component.datatable.export.DataTableCSVExporter.doExport(DataTableCSVExporter.java:76)
at org.primefaces.component.datatable.export.DataTableExporter$DataTableVisitCallBack.visit(DataTableExporter.java:357)
at com.sun.faces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:127)
at org.primefaces.component.api.UIData.visitTree(UIData.java:683)
at org.primefaces.component.datatable.export.DataTableExporter$DataTableVisitCallBack.lambda$invoke$0(DataTableExporter.java:376)
at org.primefaces.util.ComponentUtils.invokeOnClosestIteratorParent(ComponentUtils.java:539)
at org.primefaces.component.datatable.export.DataTableExporter$DataTableVisitCallBack.invoke(DataTableExporter.java:374)
at org.primefaces.component.datatable.export.DataTableExporter.export(DataTableExporter.java:318)
at org.primefaces.component.export.DataExporter.processAction(DataExporter.java:157)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:72)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:490)
at javax.faces.component.UICommand.broadcast(UICommand.java:211)
at javax.faces.component.UIData.broadcast(UIData.java:1127)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:847)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1396)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:58)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:76)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:177)
at javax.faces.webapp.FacesServlet.executeLifecyle(FacesServlet.java:707)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:451)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1636)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:331)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211)
at org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(TyrusServletFilter.java:282)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:253)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:257)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:757)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:577)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:158)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:371)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:238)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:520)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:217)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:182)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:156)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:218)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:95)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:260)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:177)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:109)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:88)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:53)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:524)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:89)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:94)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:33)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:114)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:569)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:549)
at java.base/java.lang.Thread.run(Thread.java:834)
|#]
without the following
sortBy="#{dataRow.get(colIndex).getDataValue()}" filterBy="#{dataRow.get(colIndex).getDataValue()}"
field="#{col}"
the export works
You error is this "java.lang.NumberFormatException: For input string: "Find"" So its trying to convert that column to a number but its the word "Find". Can you narrow it down any further?
PrimeFaces Developer | PrimeFaces Extensions Developer
GitHub Profile: https://github.com/melloware
PrimeFaces Elite 13.0.0 / PF Extensions 13.0.0
PrimeReact 9.6.1
GitHub Profile: https://github.com/melloware
PrimeFaces Elite 13.0.0 / PF Extensions 13.0.0
PrimeReact 9.6.1
-
- Information
-
Who is online
Users browsing this forum: Google [Bot] and 69 guests