Details
-
Type:
New Feature
-
Status: Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: EE-4.1.0.GA, EE-3.3.0.GA_P04
-
Fix Version/s: EE-4.2.0.GA, EE-3.3.0.GA_P05
-
Component/s: ACE-Components
-
Labels:None
-
Environment:All
-
Assignee Priority:P3
-
Support Case References:Support Case #13982 - https://icesoft.my.salesforce.com/5007000001gOGZD
-
Affects:Sample App./Tutorial
Description
-
- Capture1.PNG
- 61 kB
-
- export1.PNG
- 44 kB
-
- export2.PNG
- 29 kB
-
- after.PNG
- 35 kB
-
- before.PNG
- 35 kB
Activity
- All
- Comments
- History
- Activity
- Remote Attachments
- Subversion
r51305: initial commit: added basic working version of ace:listExporter
r51329: added support for exporting in xml, pdf, xls and xlsx formats
r51362: added support for exporting nested components; added support to export selected items only; added ace:listExporterValue component to export data as a table when using block objects
r51363: added showcase demos for ace:listExporter, Simple List Exporting and Block Objects Exporting
r51364: enabled multiple selection in Exporting Block Objects demo
r51386: added 'includeHeaders' functionality; when exporting in XML format, added code to put exported values inside CDATA section if necessary, when the text contains XML characters; cleaned up code and removed unnecessary code; added js resource to resource-dependency.xml, to compress target in build script and to AceSymbolicResourceHandler
Re-opened to add .xlsx support as well to the showcase demo.
r52462: added xlsx format option to ace:listExporter demos; set dragging=true on of the simple list exporting demo; separated ace:list, ace:listControl and ace:listExporter java classes and xhtml documents into their own folders (previously everything was inside /list)
Verified ICEfaces 4 trunk r51465, tomcat 8, MS edge, IE 11, 10, 9, FF 47, Chrome 57
Test app created at:
http://dev.icesoft.com/svn/repo/qa/trunk/Regression-Icefaces4/Sparkle/Manual/listExporter
Tested with ICEfaces 4 trunk r51577 and myfaces 2.2.12 libs
ace:listExporter > Block Objects showcase demo is not accessible when using myfaces libs
Server log:
31-May-2017 16:04:55.052 INFO [http-apr-8080-exec-3] com.sun.faces.application.v iew.ViewScopeManager.<init> CDI @ViewScoped bean functionality unavailable javax.faces.FacesException: Component with id:list not found at org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer.getCompone ntId(HtmlAjaxBehaviorRenderer.java:505) at org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer.build(Html AjaxBehaviorRenderer.java:467) at org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer.mapToStrin g(HtmlAjaxBehaviorRenderer.java:439) at org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer.makeAjax(H tmlAjaxBehaviorRenderer.java:158) at org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer.getScript( HtmlAjaxBehaviorRenderer.java:102) at javax.faces.component.behavior.ClientBehaviorBase.getScript(ClientBeh aviorBase.java:101) at org.apache.myfaces.shared.renderkit.html.CommonEventUtils.renderBehav iorizedAttribute(CommonEventUtils.java:184) at org.apache.myfaces.shared.renderkit.html.CommonEventUtils.renderBehav iorizedAttribute(CommonEventUtils.java:120) at org.apache.myfaces.shared.renderkit.html.CommonEventUtils.renderBehav iorizedEventHandlers(CommonEventUtils.java:217) at org.apache.myfaces.shared.renderkit.html.HtmlCheckboxRendererBase.ren derCheckbox(HtmlCheckboxRendererBase.java:390) at org.apache.myfaces.shared.renderkit.html.HtmlCheckboxRendererBase.enc odeEnd(HtmlCheckboxRendererBase.java:77) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java: 675) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 555) at org.apache.myfaces.shared.renderkit.html.HtmlGridRendererBase.renderC hildren(HtmlGridRendererBase.java:357) at org.apache.myfaces.shared.renderkit.html.HtmlGridRendererBase.encodeE nd(HtmlGridRendererBase.java:186) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java: 675) at org.icefaces.ace.renderkit.CoreRenderer.renderChild(CoreRenderer.java :78) at org.icefaces.ace.renderkit.CoreRenderer.renderChildren(CoreRenderer.j ava:62) at org.icefaces.ace.component.panel.PanelRenderer.encodeContent(PanelRen derer.java:294) at org.icefaces.ace.component.panel.PanelRenderer.encodeMarkup(PanelRend erer.java:141) at org.icefaces.ace.component.panel.PanelRenderer.encodeEnd(PanelRendere r.java:77) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java: 675) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 555) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 551) at org.apache.myfaces.shared.renderkit.RendererUtils.renderChildren(Rend ererUtils.java:688) at org.apache.myfaces.shared.renderkit.html.HtmlGroupRendererBase.encode End(HtmlGroupRendererBase.java:150) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java: 675) at org.icefaces.ace.renderkit.CoreRenderer.renderChild(CoreRenderer.java :78) at org.icefaces.ace.renderkit.CoreRenderer.renderChildren(CoreRenderer.j ava:62) at org.icefaces.ace.component.panel.PanelRenderer.encodeContent(PanelRen derer.java:294) at org.icefaces.ace.component.panel.PanelRenderer.encodeMarkup(PanelRend erer.java:141) at org.icefaces.ace.component.panel.PanelRenderer.encodeEnd(PanelRendere r.java:77) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java: 675) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 555) at org.apache.myfaces.shared.renderkit.RendererUtils.renderChildren(Rend ererUtils.java:688) at org.apache.myfaces.shared.renderkit.html.HtmlGroupRendererBase.encode End(HtmlGroupRendererBase.java:150) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java: 675) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 555) at org.apache.myfaces.shared.renderkit.RendererUtils.renderChildren(Rend ererUtils.java:688) at org.apache.myfaces.shared.renderkit.html.HtmlGroupRendererBase.encode End(HtmlGroupRendererBase.java:150) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java: 675) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 555) at org.apache.myfaces.shared.renderkit.RendererUtils.renderChildren(Rend ererUtils.java:688) at org.apache.myfaces.shared.renderkit.html.HtmlGroupRendererBase.encode End(HtmlGroupRendererBase.java:150) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java: 675) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 555) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 551) at org.icefaces.impl.context.DOMPartialViewContext.processPartial(DOMPar tialViewContext.java:300) at javax.faces.context.PartialViewContextWrapper.processPartial(PartialV iewContextWrapper.java:85) at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:516) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 542) at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.rende rView(FaceletViewDeclarationLanguage.java:1891) at org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandler Impl.java:313) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrap per.java:58) at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderRes ponseExecutor.java:116) at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java: 267) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:200) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl icationFilterChain.java:292) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF ilterChain.java:207) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52 ) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl icationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF ilterChain.java:207) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV alve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV alve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentica torBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j ava:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j ava:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAcce ssLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal ve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav a:522) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp 11Processor.java:1095) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process( AbstractProtocol.java:672) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpo int.java:2500) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoin t.java:2489) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor. java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor .java:615) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskTh read.java:61) at java.lang.Thread.run(Thread.java:745) javax.faces.FacesException: Component with id:list not found at org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer.getCompone ntId(HtmlAjaxBehaviorRenderer.java:505) at org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer.build(Html AjaxBehaviorRenderer.java:467) at org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer.mapToStrin g(HtmlAjaxBehaviorRenderer.java:439) at org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer.makeAjax(H tmlAjaxBehaviorRenderer.java:158) at org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer.getScript( HtmlAjaxBehaviorRenderer.java:102) at javax.faces.component.behavior.ClientBehaviorBase.getScript(ClientBeh aviorBase.java:101) at org.apache.myfaces.shared.renderkit.html.CommonEventUtils.renderBehav iorizedAttribute(CommonEventUtils.java:184) at org.apache.myfaces.shared.renderkit.html.CommonEventUtils.renderBehav iorizedAttribute(CommonEventUtils.java:120) at org.apache.myfaces.shared.renderkit.html.CommonEventUtils.renderBehav iorizedEventHandlers(CommonEventUtils.java:217) at org.apache.myfaces.shared.renderkit.html.HtmlCheckboxRendererBase.ren derCheckbox(HtmlCheckboxRendererBase.java:390) at org.apache.myfaces.shared.renderkit.html.HtmlCheckboxRendererBase.enc odeEnd(HtmlCheckboxRendererBase.java:77) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java: 675) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 555) at org.apache.myfaces.shared.renderkit.html.HtmlGridRendererBase.renderC hildren(HtmlGridRendererBase.java:357) at org.apache.myfaces.shared.renderkit.html.HtmlGridRendererBase.encodeE nd(HtmlGridRendererBase.java:186) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java: 675) at org.icefaces.ace.renderkit.CoreRenderer.renderChild(CoreRenderer.java :78) at org.icefaces.ace.renderkit.CoreRenderer.renderChildren(CoreRenderer.j ava:62) at org.icefaces.ace.component.panel.PanelRenderer.encodeContent(PanelRen derer.java:294) at org.icefaces.ace.component.panel.PanelRenderer.encodeMarkup(PanelRend erer.java:141) at org.icefaces.ace.component.panel.PanelRenderer.encodeEnd(PanelRendere r.java:77) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java: 675) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 555) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 551) at org.apache.myfaces.shared.renderkit.RendererUtils.renderChildren(Rend ererUtils.java:688) at org.apache.myfaces.shared.renderkit.html.HtmlGroupRendererBase.encode End(HtmlGroupRendererBase.java:150) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java: 675) at org.icefaces.ace.renderkit.CoreRenderer.renderChild(CoreRenderer.java :78) at org.icefaces.ace.renderkit.CoreRenderer.renderChildren(CoreRenderer.j ava:62) at org.icefaces.ace.component.panel.PanelRenderer.encodeContent(PanelRen derer.java:294) at org.icefaces.ace.component.panel.PanelRenderer.encodeMarkup(PanelRend erer.java:141) at org.icefaces.ace.component.panel.PanelRenderer.encodeEnd(PanelRendere r.java:77) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java: 675) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 555) at org.apache.myfaces.shared.renderkit.RendererUtils.renderChildren(Rend ererUtils.java:688) at org.apache.myfaces.shared.renderkit.html.HtmlGroupRendererBase.encode End(HtmlGroupRendererBase.java:150) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java: 675) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 555) at org.apache.myfaces.shared.renderkit.RendererUtils.renderChildren(Rend ererUtils.java:688) at org.apache.myfaces.shared.renderkit.html.HtmlGroupRendererBase.encode End(HtmlGroupRendererBase.java:150) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java: 675) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 555) at org.apache.myfaces.shared.renderkit.RendererUtils.renderChildren(Rend ererUtils.java:688) at org.apache.myfaces.shared.renderkit.html.HtmlGroupRendererBase.encode End(HtmlGroupRendererBase.java:150) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java: 675) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 555) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 551) at org.icefaces.impl.context.DOMPartialViewContext.processPartial(DOMPar tialViewContext.java:300) at javax.faces.context.PartialViewContextWrapper.processPartial(PartialV iewContextWrapper.java:85) at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:516) at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java: 542) at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.rende rView(FaceletViewDeclarationLanguage.java:1891) at org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandler Impl.java:313) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrap per.java:58) at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderRes ponseExecutor.java:116) at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java: 267) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:200) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl icationFilterChain.java:292) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF ilterChain.java:207) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52 ) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl icationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF ilterChain.java:207) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV alve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV alve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentica torBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j ava:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j ava:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAcce ssLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal ve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav a:522) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp 11Processor.java:1095) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process( AbstractProtocol.java:672) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpo int.java:2500) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoin t.java:2489) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor. java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor .java:615) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskTh read.java:61) at java.lang.Thread.run(Thread.java:745)
r51608: corrected component id in ajax tag
This fix is in the showcase app.
Verified ICEfaces 4 trunk r51622, myfaces libs, Tomcat 8, MS Edge, IE 11, 10, 9, 8, FF 47, Chrome 57.
Re-opened to backport this to the 3.3. maintenance branch for P05.
r51702: backported ace:listExporter and ace:listExporterValue to the EE 3.3 maintenance branch
r51703: backported ace:listExporter and ace:listExporterValue to http://dev.icesoft.com/svn/ossrepo/icefaces-ee/patches/icefaces-ee-3.3.0_P04-FedEx-Build
r51705: created single base class for ExporterResource in the org.icefaces.ace.util package and made the other instances extend from this class (ace:dataExporter, ace:listExporter and ace:scheduleExporter); added minor improvement for escaping XML characters in the ace:dataExporter XMLExporter class, which had been added to the XML exporters of ace:listExporter and ace:scheduleExporter
Verified ICEfaces 4 trunk and EE 4 trunk r51705, Tomcat 8, MS Edge, IE 11, 10, 9, 8. FF 47 Chrome 59.
EE 3.3 maintenance branch backport has not been tested yet.
reopened to backport showcase example to IF 3.3.0 maintenance branch as well as 3.3.0_P05 branch.
rev 51762 on ossrepo/icefaces-ee/tags/icefaces-ee-3.3.0.GA_P05-BETA backports the examples from ICEfaces 4 for the listExporter in showcase.
Note the javascript error (can't find the form) when you try to export the data. The form/markup is exactly the same as for IF 4 showcase.
r51763: fixed namespace errors in the demos (ossrepo/icefaces-ee/tags/icefaces-ee-3.3.0.GA_P05-BETA)
backport showcase demos to 3.3.0 maintenance branch
rev 51781 for showcase app backport of demo
Tested EE-3.3.0 backport to showcase on r51820, tomcat 8, MS Edge, IE 11, 10, 9, 8, 7, FF 55, Chrome 60.
Issues found:
1.) The export functionality in IE 7 causes a js error: "Access is denied"
2.) The demos should be titled Simple List and Block Objects (the same as the IF4 demos). See screenshot export1.png
3.) The ace:listExporter - Simple List demo is incorrectly titled ace:list - Selection (Ajax). See screenshot export1.png
4.) The description in the Block Objects demo is missing. See screenshot export2.png
Retested IE 7 issue with ICEfaces Ee-3.3.0 maintenance branch r51826 on 2 different IE 7 test machines. No longer able to reproduce Access Denied error.
Issues 2, 3, and 4 as above are verified resolved however the listExporter menu entries on the left side of the showcase app collapse after selecting the Block Objects demo.
See attached screen shots before.PNG and after.PNG
r51830: added parent bean property to the ace:listExporter block objects demo (3.3 EE maintenance branch)
This makes the ace:listExporter menu links to display when the block objects demo is selected.
Verified ICEfaces EE-3.3.0 maintenance branch r51830.
To support exporting ace:list data, it is more feasible and more convenient to create a new component ace:listExporter specifically for such task, following the unix philosophy.
Despite the fact that ace:list is a UIData descendant, all the code in ace:dataExporter is geared toward exporting ace:dataTable data. Most of the methods are long and have complex logic aimed at satisfying the various requirements, options, and different scenarios for exporting ace:dataTable data, including features such as multiple headers, spanning rows, child rows, tree datamodel, etc. A key difference is that ace:list doesn't use columns, while most of the code in ace:dataExporter is closely dependent on column objects.
Making all these methods even more intricate and complex in order to support exporting ace:list data would make the component harder to understand and to maintain, and it would make the code more error prone and harder to test as well.
From the development perspective, it would be easier and faster to develop a new component exclusively for exporting ace:list data. The code from ace:dataExporter that would actually apply to ace:list is actually a small percentage, and this would give us more flexibility in supporting various features and scenarios that are exclusive to ace:list, such as also supporting ace:listControl.
From the user perspective, it would be easier and more intuitive to use, since many of the attributes would be exclusive to exporting ace:list data, and ace:listExporter wouldn't have any of the ace:dataTable-specific attributes, also avoiding the need to clarify in the documentation what each attribute applies to.
This also aligns better with the planned ace:scheduleExporter component (
ICE-11238), having separate exporter components to suit specific needs.