[RESOLVIDO]IReport , relatorio nao aparece

Pessoal, fiz um relatorio simples no IReport, para aparecer apenas alguns labels sem envolver bd. e esta dando o seguinte erro :

java.lang.IllegalStateException: PWC3991: getOutputStream() has already been called for this response

segue abaixo o meu codigo :

<h:form id="form">    
    <h:commandLink actionListener="#{reportBean.executarRelatorioAssinatura1}"   target="_blank" value="Imprimir Lista111221" />                       
  
    
</h:form>             
  
**  
  
    public void executarRelatorioAssinatura1()    
            throws ParseException, IOException, JRException {    
        FacesContext context = FacesContext.getCurrentInstance();    
          
        HttpServletResponse response = (HttpServletResponse) context    
                        .getExternalContext().getResponse();    
    
                InputStream reportStream = context.getExternalContext()    
                        .getResourceAsStream("/relatorios/guiaconsulta.jasper");    
                  
                response.setContentType("application/pdf");    
    
                ServletOutputStream servletOutputStream = response    
                        .getOutputStream();  
                  
                  
 Map<String, Object> map = new HashMap<String, Object>();    
                 
    
                List dados = new ArrayList();    
    
                Map record = null;    
                JRBeanCollectionDataSource fonteDados = new JRBeanCollectionDataSource(    
                        dados);        
                  
                JasperRunManager.runReportToPdfStream(reportStream,    
                        servletOutputStream, map, fonteDados);    
    
                servletOutputStream.flush();    
                servletOutputStream.close();    
          
          
    }

Dá uma olhada nesse exemplo:

byte[]bytes  = JasperRunManager.runReportToPdf(path, parameters,
						(Connection)dataSource);
			response.setContentLength(bytes.length);
			ServletOutputStream servletStream = response.getOutputStream();
			servletStream.write(bytes, 0, bytes.length);
			servletStream.flush();
			servletStream.close();
			FacesContext.getCurrentInstance().responseComplete();

Tentei fazer da seguinte forma :

        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();    
        InputStream reportStream = context.getExternalContext()
        .getResourceAsStream("/relatorios/guiaconsulta.jasper");
        
        List dados = new ArrayList();
        
        JRBeanCollectionDataSource fonteDados = new JRBeanCollectionDataSource(
        dados);
        Map<String, Object> map = new HashMap<String, Object>();

        
    byte[]bytes  = JasperRunManager.runReportToPdf(reportStream, map,  
                            fonteDados);  
                response.setContentLength(bytes.length);  
                ServletOutputStream servletStream = response.getOutputStream();  
                servletStream.write(bytes, 0, bytes.length);  
                servletStream.flush();  
                servletStream.close();  
                FacesContext.getCurrentInstance().responseComplete();  
      
}     
    

e esta saindo conforme anexo.






Tem que ver se essa forma de obter o arquivo ta correta.Eu faço assim:

ServletContext ctx = (ServletContext) FacesContext
			.getCurrentInstance().getExternalContext().getContext();
String caminhoRelatorio = "/relatorios/projeto.jasper";
String path = ctx.getRealPath(caminhoRelatorio);

depois de muita luta, consegui a solucao aqui