Relatorio JSF

12 respostas
douglascst90

Fala galera blz?

Alguem pode me ajudar com relatorios? Preciso gerar alguns relatorios em JSF e nao estou conseguindo alguem tem um exemplo de como fazer um relatorio em pdf no JSF.

Estou usando o JSF 2.0, primefaces e hibernate. Peço a ajuda de voces. abraços.

12 Respostas

R

Douglas,dá uma sacada nesse exemplo,é no JSF 1.2 mas pode te atender:

public void imprimirManual() throws IOException{
		try {
			ServletContext ctx = (ServletContext) FacesContext
			.getCurrentInstance().getExternalContext().getContext();
			File f = new File(ctx.getRealPath("/publicacoes/manual2011.pdf"));
			HttpServletResponse response = (HttpServletResponse) FacesContext
			.getCurrentInstance().getExternalContext().getResponse();
			response.setContentType("application/pdf");
			response.setHeader("content-disposition",
			"attachment;filename=Manual2011.pdf");
			byte[]bytes = bytesFromFile(f);
			response.setContentLength(bytes.length);
			ServletOutputStream servletStream = response.getOutputStream();
			servletStream.write(bytes, 0, bytes.length);
			servletStream.flush();
			servletStream.close();
			FacesContext.getCurrentInstance().responseComplete();//NÃO funciona sem essa linha!!

		}catch(Exception e){
			e.printStackTrace();
		}
	}
R

Passando parâmetros:

String path = ctx.getRealPath("/reports/acompanhamento.jasper");
			byte[] bytes = JasperRunManager.runReportToPdf(path, parameters,
					conn);
douglascst90
<blockquote>public void imprimirManual() throws IOException{

try {

ServletContext ctx = (ServletContext) FacesContext

.getCurrentInstance().getExternalContext().getContext();

File f = new File(ctx.getRealPath("/publicacoes/manual2011.pdf"));

HttpServletResponse response = (HttpServletResponse) FacesContext

.getCurrentInstance().getExternalContext().getResponse();

response.setContentType(application/pdf);

response.setHeader(content-disposition,

attachment;filename=Manual2011.pdf);

byte[]bytes = bytesFromFile(f);

response.setContentLength(bytes.length);

ServletOutputStream servletStream = response.getOutputStream();

servletStream.write(bytes, 0, bytes.length);

servletStream.flush();

servletStream.close();

FacesContext.getCurrentInstance().responseComplete();//NÃO funciona sem essa linha!!
}catch(Exception e){  
        e.printStackTrace();  
    }  
}  </blockquote>

Eu crio uma nova classe, mas onde “chamo” o relatorio do banco? Teria que ser no ireport no caso? Nao entendi muito bem =/

R
<blockquote><div class="quote-author">douglascst90:</div><blockquote>public void imprimirManual() throws IOException{

try {

ServletContext ctx = (ServletContext) FacesContext

.getCurrentInstance().getExternalContext().getContext();

File f = new File(ctx.getRealPath("/publicacoes/manual2011.pdf"));

HttpServletResponse response = (HttpServletResponse) FacesContext

.getCurrentInstance().getExternalContext().getResponse();

response.setContentType(“application/pdf”);

response.setHeader(“content-disposition”,

“attachment;filename=Manual2011.pdf”);

byte[]bytes = bytesFromFile(f);

response.setContentLength(bytes.length);

ServletOutputStream servletStream = response.getOutputStream();

servletStream.write(bytes, 0, bytes.length);

servletStream.flush();

servletStream.close();

FacesContext.getCurrentInstance().responseComplete();//NÃO funciona sem essa linha!!
}catch(Exception e){  
        e.printStackTrace();  
    }  
}  </blockquote>

Eu crio uma nova classe, mas onde “chamo” o relatorio do banco? Teria que ser no ireport no caso? Nao entendi muito bem =/

Como assim “chamar” do banco?

Quem dispara o relatório vai ser tua aplicação,crie um h:commandButton que invoca o método.

douglascst90

Nao tinha visto esse codigo

String path = ctx.getRealPath("/reports/acompanhamento.jasper"); byte[] bytes = JasperRunManager.runReportToPdf(path, parameters, conn);

É aqui que ele chama o relatorio do ireport(jasper). Certo?

R

douglascst90:
Nao tinha visto esse codigo

String path = ctx.getRealPath("/reports/acompanhamento.jasper"); byte[] bytes = JasperRunManager.runReportToPdf(path, parameters, conn);

É aqui que ele chama o relatorio do ireport(jasper). Certo?

Sim.

douglascst90

OBRIGADO

mausexdd

:-o
Da uma pesquisada na doc oficial

O proprio primefaces tem um gerador de relatorios PDF nao precisa por mais um framework ai nao amigão

douglascst90

Mas eu preciso de relatorios mais detalhados com dados de varias tabelas, com o componente do prime eu pego uma lista. No meu caso to usando o iReport, que ja esta gerando os relatorios, so preciso chamar ele(esse é o problema). Abraços.

douglascst90

raf4ever estou com problema nessa linha

byte[] bytes = JasperRunManager.runReportToPdf(path, parameters,conn);

em “path”, “parameters” e “conn” não entendi muito bem o que deve por, o qual do parametro???

obrigado.

douglascst90

nada pessoal

douglascst90

O problema ainda persiste…

Criado 11 de outubro de 2011
Ultima resposta 18 de out. de 2011
Respostas 12
Participantes 3