Integração do JSF2 + PrimeFaces + Jasper

3 respostas
M

Pessoal, bom dia!

Tenho uma aplicação rodando em MySql, utilizando Hibernate e JSF2 com PrimeFaces. Até ai, tudo ok.
Desenhei alguns relatórios no iReport e agora quero integrá-los a minha aplicação.
Alguém poderia dar uma dica de como fazer? Já vi alguns posts sobre o assunto, mas não muito claros na minha ótica.
Sou novo no assunto e qualquer ajuda será muito bem vinda.

Desde já agradeço.

Marcelo

3 Respostas

A

cara,

segue um metodo que eu fiz e vai te ajudar.

public static void imprimir(JRBeanCollectionDataSource ds, String reportUrl, Map<String, Object> parametros){
		FacesContext facesContext = FacesContext.getCurrentInstance();
		
		HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
		HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
		OutputStream os = null;
		
		try {
			String reportUrlReal = request.getSession().getServletContext().getRealPath("relatorio" + File.separator + reportUrl);
			
			JasperPrint jasperPrint = JasperFillManager.fillReport(reportUrlReal, parametros, ds);
			byte[] pdf = JasperExportManager.exportReportToPdf(jasperPrint);
			
			os = response.getOutputStream();
			response.setContentType("application/pdf");
			response.setContentLength(pdf.length);
			response.setHeader("Content-disposition","attachment; filename=\""+ reportUrl.substring(0, reportUrl.length() - 7)+ ".pdf\"");
			os.write(pdf);
			os.flush();
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				if(os != null){
					os.close();
				}
				facesContext.responseComplete();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

t+

M

alissonvla,

Esse método vc usa dentro de um servelet? Como fica a chamada?
Desculpe as perguntas, mas é que não manjo muito.
Obrigado de qualquer forma.

Marcelo

A

cara,

Eu tenho uma Classe Relatorio no pacote util e é vc so chamar o metodo no seu ManagedBean e desse jeito.

JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(lista);//lista é uma arraylist com os dados que apareçam no meu relatorio
		
Relatorio.imprimir(ds, "relatorio.jasper", new HashMap<String, Object>());//o arquivo .jasper se encontra na pasta relatorio dentro da pasta WebContent

t+

Criado 3 de novembro de 2011
Ultima resposta 3 de nov. de 2011
Respostas 3
Participantes 2