ae pessoal, to com um probleminha aqui que ja gastei horas e nao conseguir resolver, nao sei se alguem ja passou por isso, e pode ajudar.
A situação, preciso gerar um relatorio pdf com ireport + jasperreport, até blz, os relatorios estão sendo gerado, mas o problema que o codigo atual ta tudo misturado com o controlador JSF, e quero que o codigo que gere o relatorio pdf fique em uma classe separada, e que la no controlador chame o metodo responsavel por gerar o relatorio, mas to tendo a excecao a seguir:java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:608)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:200)
at com.sun.facelets.FaceletViewHandler.createResponseWriter(FaceletViewHandler.java:414)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:571)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:201)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:163)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:401)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:242)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:267)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:245)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:260)
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)
Já olhei tudo e nao consigo ver o motivo da exceção ou escrita e depois chamada do stream acima. Abaixo, os metodos chaves:
na classe Controler.javaprivate UsuarioDAO usuarioDAO = new UsuarioDAO();
public String gerarRelatorioUS() throws IOException {
List listaUs = usuarioDAO.listaUSALL();
return new GerarRelatorio().relatorioUSALL(listaUs);
}
public class GerarRelatorio {
public String relatorioUSALL(List lista){
try{
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
//caminho do jrxml
InputStream pathjrxml = getClass().getResourceAsStream("../jrxml/relatorioblog.jrxml");
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=\"relatoriotodosusuarios.pdf\"");
ServletOutputStream responseStream = response.getOutputStream();
JasperReport pathReport = JasperCompileManager.compileReport(pathjrxml);
JasperPrint print = JasperFillManager.fillReport(pathReport, null, new JRBeanCollectionDataSource(lista));
JasperExportManager.exportReportToPdfStream(print, responseStream);
responseStream.flush();
responseStream.close();
context.renderResponse();
context.responseComplete();
}catch (Exception e) {
return "failreport";
}
return "donereport";
alguma sugestão?
flw.