Olá estou fazendo a geração de relatório em uma página de cadastr e se
estiver um combo box selecionado tem Salvar e gerar um relatório.
Ao clicar em salvar ele gera o relatório corretamente, salva o
conteúdo que quero persistir, porém o ciclo de vida é afetado pois ao
salvar tem que ir para uma nova página, mas aparece o popup para
salvar o relatório ou abri-lo mas continua na mesma página.
Obrigado
public String incluir() {
try {
dadosForm.validar();
this.manterOcorrenciaAlunoEJB.inserir(dadosForm);
===============AQUI ELE CHAMA O MÉTODO PARA IMPRIMIR O RELATÓRIO
this.imprimirCarta();
=====================================================================
FacesUtil.adicionarMensagemAviso("Inclusão realizada com sucesso");
} catch (NegocioException e) {
e.printStackTrace();
FacesUtil.adicionarMensagemErro( e.getMensagens() );
return null;
} catch (Exception e) {
e.printStackTrace();
FacesUtil.adicionarMensagemErro("Erro ao realizar a inclusão: " +e.getMessage());
return null;
}
String retorno = getPaginaPesquisa();
FacesUtil.getFacesContext().responseComplete();
return retorno;
}
public void imprimirCarta(){
try {
//obtem os dados do relatorio
List<OcorrenciaAluno> dados = new ArrayList();
dados.add(this.dadosForm);
//define o path completo do arquivo do relatorio (.jasper)
String arqJasper = FacesUtil.getRealPath() + "/reports/CartaOcorrenciaAluno.jasper";
//define os parametros do relatorio
Map<String, Object> parametros = new HashMap<String,Object>();
parametros.put("textonotificacao",this.dadosForm.getTextoNotificacao());
parametros.put("imagem", FacesUtil.getRealPath() + "/images/");
//gera o relatorio e o envia como resposta para o browser.
FacesUtil.gerarRelatorioPdf(arqJasper, //path completo doarquivo .jasper
dados, //um List contendo os dados do relatorio
parametros, //um Map com os parametros que o relatorio necessita
"CartaOcorrenciaAluno.pdf"); //nome do arquivo PDF
} catch (Exception e) {
e.printStackTrace();
FacesUtil.adicionarMensagemErro(e.getMessage());
}
}
public static void gerarRelatorioPdf(String arquivoJasper, List dadosRelatorio, Map<String, Object> parametrosRelatorio, String nomePdf)
throws NegocioException {
try {
//obtem o relatorio como PDF através da classe RelatorioJasper
//passando o 'arquivo jasper', os 'dados' e os 'parametros' do relatorio (este ultimo
//nao eh obrigatorio)
byte[] relatorioPdf = RelatorioJasper.gerarPdf(arquivoJasper, dadosRelatorio, parametrosRelatorio);
// obtem o objeto response
HttpServletResponse response = getResponse();
// Define No response o tipo do arquivo que será exibido no
// navegador (PDF)
response.setContentType("application/pdf");
// Configura informações sobre o arquivo no response
if (StringUtils.isEmpty(nomePdf)) {
nomePdf = "relatorio.pdf";
}
response.setHeader("Content-disposition", "attachment;filename=" +nomePdf);
// Envia os bytes do arquivo PDF, através de um fluxo de dados,para
// o browser
response.getOutputStream().write(relatorioPdf);
// Avisa p/ o 'ciclo de vida JSF' que já terminamos de usar o
// response,
// logo, os demais passos do ciclo de vida serão executados até que
// o
// PDF seja exibido em tela, para o usuário
getFacesContext().responseComplete();
} catch (Exception e) {
throw new NegocioException("Erro ao gerar o relatorio: "
+ e.getMessage());
}
}