[b]Boa tarde pessoal,
estou tentando gerar um relatório PDF simples com IReport, meu codigo é o seguinte :[/b]
List<Cargo> lista= this.getListaCargos();
try{
if (lista!= null && lista.size() > 0) {
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
ServletOutputStream responseStream = response.getOutputStream();
response.setContentType("apllication/pdf");
response.setHeader("Content-Disposition", "attachment; filename=\"RelacaoCargosVagos.pdf\"");
String report = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/relatorios/RELATORIO_CARGOS_VAGOS.jasper");
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(lista, false);
Map<String, Object> params = new HashMap<String, Object>();
params.put("caminhoLogo", FacesContext.getCurrentInstance().getExternalContext().getRealPath("/resources/img/logo.jpg"));
JasperPrint print = JasperFillManager.fillReport(report, params, ds);
JasperExportManager.exportReportToPdfStream(print, responseStream);
responseStream.flush();
responseStream.close();
FacesContext.getCurrentInstance().getRenderResponse();
FacesContext.getCurrentInstance().responseComplete();
Mas pego o seguinte erro quando passa para esta linha > JasperExportManager.exportReportToPdfStream(print, responseStream); :
An Error Occurred:
getOutputStream() has already been called for this response
± Stack Trace
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:637)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:214)
at com.sun.faces.context.ExternalContextImpl.getResponseOutputWriter(ExternalContextImpl.java:723)
at javax.faces.context.ExternalContextWrapper.getResponseOutputWriter(ExternalContextWrapper.java:669)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.createResponseWriter(FaceletViewHandlingStrategy.java:879)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:374)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:273)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:509)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168 )
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98 )
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118 )
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Alguém sabe como resolver isso ? O curioso é que uso um código idêntico para gerar um outro relatório PDF em outro UC mas tudo funfa perfeitamente…
Grato,