JSF + JASPER: problema com o browser. [RESOLVIDO]

1 resposta
liviaguedes

Olá Galera do GUJ,

Bom pesquise muito e vi diversos topico referente a este assunto, porem nao consegui ainda resolver meu problema.
TEnho uma pagina CadMediator.java onde tenho um metodo imprimir()

public void imprimir() throws SQLException, IOException, JRException {

        System.out.println("inicio");

        FacesContext facesContext = FacesContext.getCurrentInstance();
        ServletContext servletContext = (ServletContext)facesContext.getExternalContext().getContext();

        // Na variavel pathJasper ficara o caminho do diretório para os relatórios compilados (.jasper)
        // A variavel path armazena o caminho real para o contexto isso é util pois o seu web container pode estar instalado em lugares diferentes
         String pathJasper = servletContext.getRealPath("/WEB-INF/classes/impressao/")+ "/";
         System.out.println("Context path ====== " + pathJasper);

        // pegando o response do contexto do faces
        HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();



       //String titulo = request.getParameter("TituloRelatorio");
       String titulo = "teste";

       String nomeRelatorio = "RelatorioGuiaSADT"; //teste
       System.out.println("nomeRelatorio :" + nomeRelatorio);

       try{

        //parametros
       Map<String, Object> parametros = new HashMap<String, Object>();
			parametros.put("TituloRelatorio", titulo);
			parametros.put("SUBREPORT_DIR", pathJasper);

        //Gera o Relatório somente em array de bytes
        byte[] bytes = null;

        BancosDados con = new BancosDados();

            String completa = pathJasper+"/"+nomeRelatorio+".jasper";
            System.out.println(completa);
		    JasperReport relatorioJasper = (JasperReport) JRLoader.loadObject(completa);
            System.out.println("relatorioJasper : "+relatorioJasper);

          
            if(con.getConnection()!= null){
				bytes = JasperRunManager.runReportToPdf(relatorioJasper, parametros, con.getConnection());
                System.out.println("passei aki");
			}else{
				System.out.println("relatorio nao possui conexao com o banco!!");
			}

            if ((bytes != null)&&(bytes.length>0)){
                //envio o relatorio em formato pdf para o browser.
                 response.setContentType("application/pdf");
	 response.setContentLength(bytes.length);
	 ServletOutputStream ouputStream = response.getOutputStream();
	 ouputStream.write(bytes, 0, bytes.length);
	 ouputStream.flush();
	 ouputStream.close();

               // definindo que a resposta ao contexto do faces está completa
              facesContext.responseComplete();

            }else{
	    	 System.out.println("relatorio nao possui dados!!");
	        }

        } catch (JRException e) {
            System.out.println(" JRException >>"+e.getMessage());
            throw e;
        } catch (IOException e) {
            System.out.println("IOException >>"+e.getMessage());
            throw e;
        }
  
     
    }

Bom o problema é o seguinte… ele passa pelo metodo , monta o relatorio mas nao aparece nd na tela.
Aparece apenas um erro de javascript no canto do browser dizendo:
"O objeto nao da suporte para a propriedade ou metodo ".
Concluindo nao entendo oq acontece, fiz o msm exemplo usando jsp e servlet e funciona tranquilo.

O que pode esta acontecendo??!! :cry:
Se alguem souber agradeço…

:wink:

1 Resposta

liviaguedes

Bom depois de muito bater cabeça… conseguimos resolver esse problema…

bom pra começar mudei o <a4j:commandButton … /> para <h:commandButton … />
alterei o faces-config.xml
e pronto!! como passe de magica…

Criado 22 de abril de 2009
Ultima resposta 22 de abr. de 2009
Respostas 1
Participantes 1