JSF - Abrir um relátorio em uma nova janela

Olá pessoal!!
Eu tenho um botão que chama um relatório e esse relatório abre já pedindo para fazer download, mas eu preciso
que o usuário visualize o documento em outra janela antes de fazer download/imprimir.
Já utilizei o target="_blank" mas ele abre uma nova janela e fecha instataneamente e abre a de pedido para download.

O código do meu botão está assim:

<p:commandButton value="Gerar Dare " update="frmRelatorio" ajax="false" actionListener="#{relatorioControlador.gerarDocumentoDare}" onclick="this.form.target='_blank'" /><p:spacer width="30px"></p:spacer>

Já pesquisei em outros tópicos aqui do forum sobre o mesmo assunto mas nenhum resolveu o meu problema.
Se alguém tiver uma dica eu agradeço.
Abraços

Bom dia.
Posta o código de como você esta gerando o relatório.
Pesquise durante um tempo, atualmente eu coloco para exibir em um pop-up.

<p:commandButton image="ui-icon-print"
action="#{portariaController.actionExecutarRelatorio}"
oncomplete="javascript:NovaJanela('#{request.contextPath}/gerarRelatorio','nomeJanela','450','450','yes');return false;"
value="Imprimir" />

Bom dia Edson.
Obrigado pela dica do pop up.
Sim estou pesquisando muito e tudo que eu vi até agora foram por meios de servlet.

O código de como eu gero o relatório (É um pouco grande por que é para gerar um boleto feito no iReport):

[code] public void gerarDocumentoDare() {

	// Classes de Formatação
	
	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		
	SimpleDateFormat hora = new SimpleDateFormat("dd/MM/yyyy / HH:mm:ss");
	
	NumberFormat valor = new DecimalFormat("###0.00");
	
	try {

		// Lista de Parâmetros estáticos

		Map<String, String> params = new HashMap<String, String>();

		// Lista de registro
		// List<DocumentoArrec> listarDadosDare=
		// documentoArrecNeg.listarDadosDocumento();
		DocumentoArrec documento = documentoArrecNeg.consultar(64);//
	//	DocumentoArrec documento = documentoArrecNeg.consultar(getDocumentoArrec().getIdDocumentoArrec());
	//	DocumentoArrec documento =getDocumentoArrec();
		
		List<Map<String, String>> fields = new ArrayList<Map<String, String>>();
		Map<String, String> mapItemRelatorio = new HashMap<String, String>();

		if (documento.getNumrReservadoProcesm() != null)
			mapItemRelatorio.put("numDare", documento
					.getNumrReservadoProcesm().toString());

		if (documento.getNumrDocumentoOrigem() != null)
			mapItemRelatorio.put("docOrigem", documento
					.getNumrDocumentoOrigem().toString());

		if (documento.getReceitaDetalhe() != null)
			mapItemRelatorio.put("detalheReceita", documento
					.getReceitaDetalhe().getDescDetalheReceita().toString());

		if (documento.getTipoDocumentoArrec() != null)
			mapItemRelatorio.put("especReceita", documento
					.getTipoDocumentoArrec().toString());
		
		if (documento.getTipoDocumentoArrec() != null)
			mapItemRelatorio.put("especReceitaNome", documento
					.getTipoDocumentoArrec().getDescTipoDocumentoArrec().toString());
		

		if (documento.getRefeMes() != null)
			mapItemRelatorio.put("refMes", documento.getRefeMes()
					.toString());

		if (documento.getRefeAno() != null)
			mapItemRelatorio.put("refAno", documento.getRefeAno()
					.toString());

		if (documento.getNumrParcela() != null)
			mapItemRelatorio.put("parcela", documento.getNumrParcela()
					.toString());

		if (documento.getInfoCompl() != null)
			mapItemRelatorio.put("infoComplementar", documento
					.getInfoCompl().toString());

		if (documento.getDataVencimentoTributo() != null)
			mapItemRelatorio.put("data", sdf.format( documento
					.getDataVencimentoTributo()) );

		if (documento.getDataValidadeCalculo() != null)
			mapItemRelatorio.put("dataValidade", sdf.format( documento.getDataValidadeCalculo()));

		if (documento.getDataEmissao() != null)
			mapItemRelatorio.put("dataEmissao", hora.format( documento.getDataEmissao()));


		if (documento.getValrTotalDocumento() != null)
			mapItemRelatorio.put("valorTotal", valor.format( documento
					.getValrTotalDocumento()));

		if (documento.getContribuinteDocumento() != null) {

			if (documento.getContribuinteDocumento()
					.getNomeRazaoSocialEmitente() != null)
				mapItemRelatorio.put("nomeRazao", documento
						.getContribuinteDocumento()
						.getNomeRazaoSocialEmitente().toString());

			if (documento.getContribuinteDocumento()
					.getNumrInscricaoEmitente() != null)
				mapItemRelatorio.put("inscEstadual", documento
						.getContribuinteDocumento().
						getNumrInscricaoEmitente().toString());
			
			if (documento.getContribuinteDocumento()
					.getNumrCnpjEmitente() != null)
				mapItemRelatorio.put("cnpj", documento
						.getContribuinteDocumento().
						getNumrCnpjEmitente().toString());
			
			if (documento.getContribuinteDocumento()
					.getNumrCpfEmitente() != null)
				mapItemRelatorio.put("cpf", documento
						.getContribuinteDocumento().
						getNumrCpfEmitente().toString());
			
			if (documento.getContribuinteDocumento()
					.getNumrPlacaVeiculo() != null)
				mapItemRelatorio.put("placa", documento
						.getContribuinteDocumento().
						getNumrPlacaVeiculo().toString());
			

			if (documento.getContribuinteDocumento()
					.getInfoEnderecoEmitente() != null)
				mapItemRelatorio.put("endereco", documento
						.getContribuinteDocumento()
						.getInfoEnderecoEmitente().toString());
			

			if (documento.getContribuinteDocumento()
					.getMunicipioEmitente() != null)
				mapItemRelatorio.put("municipio", documento
						.getContribuinteDocumento().getMunicipioEmitente().getNomeMunicipio());
			
			if (documento.getContribuinteDocumento()
					.getMunicipioEmitente() != null)
				mapItemRelatorio.put("uf", documento
						.getContribuinteDocumento().getMunicipioEmitente().getCodgUF());


			if (documento.getContribuinteDocumento()
					.getCodgDddTelefoneEmitente() != null)
				mapItemRelatorio.put("ddd", documento
						.getContribuinteDocumento()
						.getCodgDddTelefoneEmitente().toString());
			
			if (documento.getContribuinteDocumento()
					.getNumrTelefoneEmitente() != null)
				mapItemRelatorio.put("telefone", documento
						.getContribuinteDocumento()
						.getNumrTelefoneEmitente().toString());
			
		}
		
		
	if (documento.getCodgBarra() != null)
		mapItemRelatorio.put("codBarra", documento.getCodgBarra().toString());
	


	
		
		int cont = 1;
		for (AlineaDocumento alinea : documento.getListaAlineaDocumento()) {
			String campo = "alinea" + cont;
			
			String total = "valor" + cont;	

			DominioGenerico dominioGenerico = new DominioGenerico();
			dominioGenerico=dominioNeg.buscarIdDominio(alinea.getTipoAlinea().toString(), "TIPO_ALINEA_VALOR");
			
			if ((dominioGenerico.getDescricao() != null) &&  (alinea.getTipoAlinea() != null) &&
					(alinea.getReceitaTrib().getReceitaOrcamentaria().getCodgNaturezaReceita() != null))
			{
			
			mapItemRelatorio.put(campo,dominioGenerico.getDescricao() + " (" +
					alinea.getTipoAlinea()
					+ alinea.getReceitaTrib().getReceitaOrcamentaria().getCodgNaturezaReceita() 
					+ ")");
			}
			mapItemRelatorio.put(total, valor.format( alinea.getValrAlinea()));
			
			cont++;
		}
		

		fields.add(mapItemRelatorio);

		if (!fields.isEmpty()) {
			ReportGenerator reportGenerator2 = new ReportGenerator();
			reportGenerator2.printReport("P", params,
					"relatorioEmissaoDare.jasper", "emissaoDare", fields);

		} else {
			addMensagemFaces("Não existem Receitas Tributarias.");
		}

//	} catch (ConsultarException e) {
//		e.printStackTrace();
	} catch (JRException ex) {
		addMensagemFaces("Erro: " + ex.getMessage(),
				FacesMessage.SEVERITY_INFO);

	} catch (Exception ex) {
		addMensagemFaces("Erro: " + ex.getMessage(),
				FacesMessage.SEVERITY_INFO);

	}

}

}[/code]

Bom dia.
Segue o exemplo de como abrir em uma nova pagina.

<h:commandLink actionListener="#{alunoController.executarRelatorioAssinatura}"	target="_blank" value="Imprimir Lista" styleClass="btnimprimir" />
public void executarRelatorioAssinatura(ActionEvent action)
			throws ParseException {
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			if (turma != null && turma.getCodId() != null
					&& turma.getCodId() != 0) {

				HttpServletResponse response = (HttpServletResponse) context
						.getExternalContext().getResponse();

				InputStream reportStream = context.getExternalContext()
						.getResourceAsStream("/relatorio/listapai.jasper");

				response.setContentType("application/pdf");

				ServletOutputStream servletOutputStream = response
						.getOutputStream();

				turma = DaoFactory.getTurmaDao().findByPk(turma.getCodId());

				List<AlunoEscola> listaALuno = AlunoEscolaController
						.listaAlunoEscola(turma);

				String t = turma.getDescricao();
				String ano = turma.getEscolaSerie().getDescricao();

				Map<String, Object> map = new HashMap<String, Object>();
				map.put("turma", ano + " - " + t);

				List dados = new ArrayList();

				Map record = null;
				Aluno aluno = null;

				for (AlunoEscola ae : listaALuno) {
					aluno = ae.getAluno();
					record = new HashMap();
					record.put("nome", aluno.getNome());
					record.put("data", aluno.getDataNascimento());

					dados.add(record);
				}

				JRBeanCollectionDataSource fonteDados = new JRBeanCollectionDataSource(
						dados);

				JasperRunManager.runReportToPdfStream(reportStream,
						servletOutputStream, map, fonteDados);

				servletOutputStream.flush();
				servletOutputStream.close();
			}
		} catch (JRException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			context.responseComplete();
		}
}

Espero que ajude.

Obrigado Edson, consegui resolver usando o seu exemplo.

Vlw abraços.

De nada.
Meu exemplo que usar o pop-up eu configurei com servlet.

Att,
Edson

Olá, para ficar perfeito, só falta complementar uma linha de código, que indica ao browser que o conteúdo será “inline” (aberto no próprio browser)

Para forçar o donwload do PDF, basta trocar por “attachment”.

Eis o complemento:

[code]
//… incluir depois da linha abaixo
response.setContentType(“application/pdf”);

// Seta o nome do arquivo e a disposição: “inline” abre no próprio navegador
// Mude para “attachment” para indicar que deve ser feito um download
response.setHeader(“Content-disposition”, “inline; filename=arquivo.pdf”);

// … continuação do seu código[/code]

Veja mais detalhes no post: http://java-bytecode.blogspot.com.br/2012/08/como-exibir-um-pdf-numa-pagina-jsf.html

[]'s

Da forma como Edson falou, funcionou perfeitamente para mim. Obrigado por compartilhar a informação.

<h:commandLink actionListener="#{alunoController.executarRelatorioAssinatura}"   target="_blank" value="Imprimir Lista" styleClass="btnimprimir" />