Mais um problema com Ireport e JSF - Na hora de mostrar o relatório na tela

4 respostas
SanjuanRJ

Estou tentando mostrar o pdf para o usuário assim que ele visitar a página e estou tomando o seguinte erro:

java.lang.IllegalStateException: Servlet response already use Writer, OutputStream not possible

FacesContext fc = FacesContext.getCurrentInstance();
            ServletContext servletContext = (ServletContext) fc.getExternalContext().getContext();
            String jasperReport = servletContext.getRealPath("/relatorios") + "/";

            jasperReport += "produtosMensais.jasper";

            HttpServletResponse response = (HttpServletResponse) fc.getExternalContext().getResponse();
            Map parametros = new HashMap();
            JasperPrint report = null;
            try {
                report = JasperFillManager.fillReport(jasperReport, parametros, Coneccao.getConnection());
                byte pdf[] = JasperExportManager.exportReportToPdf(report);
                //
                
                response.setContentType("application/pdf");
                response.setContentLength(pdf.length);
                response.setHeader("Content-disposition", "inline");

                response.setHeader("Cache-Control", "cache, must-revalidate");
                response.setHeader("Pragma", "public");
                ServletOutputStream out = response.getOutputStream();

                out.write(pdf);
                StateManager stateManager = (StateManager) fc.getApplication().getStateManager();
                stateManager.saveSerializedView(fc);

                fc.responseComplete();
                
            } catch (JRException e) {
                Logging.Excecao(e, "gestao.paginas.RelatorioClienteResultado.getLoad");
                e.printStackTrace();
            }

qualquer ajuda é bem vinda

4 Respostas

SanjuanRJ

nada pessoal? :cry:

D

Acabei de responder algo similar:

http://www.guj.com.br/posts/list/81020.java

Abraços

SanjuanRJ
FacesContext fc = FacesContext.getCurrentInstance();
            
            ServletContext servletContext = (ServletContext) fc.getExternalContext().getContext();

            HttpServletResponse response = (HttpServletResponse) fc.getExternalContext().getResponse();
            InputStream reportStream = fc.getExternalContext().getResourceAsStream("/relatorios/produtosMensais.jasper");
            ServletOutputStream servletOutputStream = response.getOutputStream();
            
            try 
            {
                JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, new HashMap(), Coneccao.getConnection());
                response.setContentType("application/pdf");
                servletOutputStream.flush();
                servletOutputStream.close();
            } 
            catch (JRException e) 
            {
                Logging.Excecao(e, "gestao.paginas.RelatorioClienteResultado.getLoad");
                e.printStackTrace();
            }
            fc.responseComplete();

dessa vez eu to fazendo dessa forma, e estou tomando o mesmo erro...

foi apenas uma outra forma de fazer a mesma coisa que eu fiz no meu primeiro post

raphaelfs

Tive o mesmo problema no trabalho.

e vi que erro estava na linha

ServletOutputStream servletOutputStream = response.getOutputStream();

não consegui resolver o problema e meu codigo estava como esta o seu.
Bom, dai o que fiz, creie um Servlet e coloquei o codigo

ServletOutputStream servletOutputStream = response.getOutputStream();
			 
			 InputStream reportStream = getServletConfig().getServletContext().getResourceAsStream("/reports/config/LogUserActionsReport.jasper");
			 
			 List results = new ArrayList();
			 results = doFakeReportData();
			
			 JRBeanCollectionDataSource jrDataSourse = new JRBeanCollectionDataSource(results);
			 

			 JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, new HashMap(), jrDataSourse);
			  
			 response.setContentType("application/pdf");
			 
			 servletOutputStream.flush();
			 servletOutputStream.close();

não sei se esta certo ou errado isso… mas aqui funcionou legal :smiley:
espero que tenha ajudado

Criado 1 de fevereiro de 2008
Ultima resposta 7 de fev. de 2008
Respostas 4
Participantes 3