JSF e Jasper Report

125 views
Skip to first unread message

Rodrigo Rosa

unread,
Oct 16, 2007, 1:34:18 PM10/16/07
to javasf: JavaServer Faces International Group
Saudações,

estou finalmente adicionando alguns relatórios à minha aplicação web.
Estou usando o Jasper Report e até então tudo tem se mostrado
satisfatório.. bem, quase tudo!
As minhas páginas são todas no padrão cabecalho/menu lateral/rodapé. Uso
jsp fragments para montar (é, deveria usar facelets, mas o VWP do
Netbeans me deixou preguiçoso).
Mas quando vou renderizar o relatório, nos exemplos que vi pelo menos,
ele basicamente obtem o response e joga o relatório lá. Blz, funciona
mas meu belo cabecalho vai p as cucuias.
Estou folheando o livro Jasper Reports For Java Developers e tem um
capitulo la no finalzinho para integrar com JSF, mas ele usa o mesmo
método... ou seja, o resultao final é uma página unicamente com o relatório.
Tem alguma maneira de eu... err... inserir meu relatorio numa página ou
fazer o meu cabeçalho/rodapé ser renderizado junto com o relatório (sem
ter que adicionar no relatório propriamente dito)?

Valeus,

--
Rodrigo Rosa
Desenvolvimento
Wonder Sistemas de Informações
Erechim - RS

Rafael Ponte

unread,
Oct 16, 2007, 12:37:47 PM10/16/07
to jav...@googlegroups.com
Um popup não resolveria?? Ou até mesmo um iframe?
--
Rafael Ponte

Carlos Gregoreki

unread,
Oct 16, 2007, 12:52:54 PM10/16/07
to javasf: JavaServer Faces International Group
Aí Rodrigo...

eu fiz isso que vc pensou em uma aplicação por aqui, no entanto eu não
utilizo Jasper e sim o BIRT do Eclipse =)

o que eu fiz foi despachar um cabeçalho, juntando com o servlet do
relatorio, fazendo assim:

ServletContext sc = req.getSession().getServletContext();
sc.getRequestDispatcher("cabecalho.jspx").include(req,

resp);


agora, se a sua aplicação não vem por servlet, daí por enquanto vc
fica sem resposta =)

abraço,
by Carlos

Rafael Ponte

unread,
Oct 16, 2007, 12:58:56 PM10/16/07
to jav...@googlegroups.com
Olá Carlos, poderia explicar melhor como está ocorrendo o processo aí?

On 10/16/07, Carlos Gregoreki <moor...@gmail.com > wrote:

Aí Rodrigo...

eu fiz isso que vc pensou em uma aplicação por aqui, no entanto eu não
utilizo Jasper e sim o BIRT do Eclipse =)

o que eu fiz foi despachar um cabeçalho, juntando com o servlet do
relatorio, fazendo assim:

  ServletContext sc = req.getSession().getServletContext();
sc.getRequestDispatcher ("cabecalho.jspx").include(req,


resp);


agora, se a sua aplicação não vem por servlet, daí por enquanto vc
fica sem resposta =)

abraço,
by Carlos


Rafael Ponte

Rodrigo Rosa

unread,
Oct 16, 2007, 2:05:21 PM10/16/07
to jav...@googlegroups.com
Opa!

Estava aqui dando uma olhada nas alternativas sugeridas pelo Ponte
(valeu, Ponte!), mas o q eu realmente queria era algo assim como vc sugeriu!
Deixa eu tentar aqui p ver se funciona no meu contexto. Mas a idéia é
exatamente essa... anexar o cabecalho "na corrida".
=)

Carlos Gregoreki escreveu:

Carlos Gregoreki

unread,
Oct 16, 2007, 1:14:53 PM10/16/07
to javasf: JavaServer Faces International Group
Certo Rodrigo...
=)

Hey Rafael...
vou explica rum pouco, já que não sou muito didático pra essas coisas
=D

a minha aplicação possui como visualzador de relatorios o BIRT do
eclipse...
para chamar um relatório, eu escolhi chamá-lo por servlet, ou seja, no
método doGet() do meu servlet eu tenho implementado as linhas de
código pra me renderizar um relatorio na tela.
Assim:

public void doGet(HttpServletRequest req,
HttpServletResponse resp) throws
ServletException,
IOException {
resp.setContentType("text/html");
ServletContext sc =
req.getSession().getServletContext();


sc.getRequestDispatcher("cabecalho.jspx").include(req,

resp);
this.birtReportEngine =
BirtEngine.getBirtEngine(sc); //cria a engine do birt...

HTMLRenderContext renderContext = new
HTMLRenderContext();
//... alguns codigos nao necessarios para essa
discussao
IReportRunnable design;

try {
String reportName = "relatorio.rptdesign";
design =
birtReportEngine.openReportDesign(reportName); //abre o design para
jogar os dados lah dentro
designFactory(design);
IRunAndRenderTask task =
birtReportEngine.createRunAndRenderTask(design);
task.setAppContext(contextMap);
HTMLRenderOption options = new HTMLRenderOption();

options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML);
options.setOutputStream(resp.getOutputStream());
task.setRenderOption(options);

// run report
task.run(); // aqui roda o relatorio e o mostra na
tela dentro do response
task.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}

pronto...
como vc pode ver, eu tenho (cabecalho.jspx + relatorio) como response.
task.run() faz com que o relatorio seja mostrado na tela.

=)

espero ter sido claro o suficiente..

abraço,
by Carlos

rogerio...@gmail.com

unread,
Oct 16, 2007, 1:15:45 PM10/16/07
to javasf: JavaServer Faces International Group
Sempre abro um popup para relatórios iReport, funciona legal, é só no
onclick abrir a janela e setar o target do commandLink com o nome da
janela aberta.

Rafael Ponte

unread,
Oct 16, 2007, 1:20:31 PM10/16/07
to jav...@googlegroups.com
No final você misturou HTML + PDF ? Isso que não consigo entender.. o browser costumar ter um plugin da adobe para abrir relatório, então o plugin abre uma janelinha do PDF abaixo do cabecalho, é isso?

On 10/16/07, Carlos Gregoreki <moor...@gmail.com> wrote:
                task.run (); // aqui roda o relatorio e o mostra na

tela dentro do response
                task.close();
            } catch (IOException e) {
                e.printStackTrace();
            }  catch (Exception e) {
                e.printStackTrace();
            }
         }

pronto...
como vc pode ver, eu tenho (cabecalho.jspx + relatorio) como response.
task.run() faz com que o relatorio seja mostrado na tela.

=)

espero ter sido claro o suficiente..

abraço,
by Carlos







--
Rafael Ponte

Carlos Gregoreki

unread,
Oct 16, 2007, 1:33:41 PM10/16/07
to javasf: JavaServer Faces International Group
Rafael...

quando eu coloco
resp.setContentType("text/html");

digo que o response vai ser apenas em text/html.

a seguinte parte do codigo diz para o relatorio ser em html, nao em
pdf..
options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML);


ou seja, meu relatorio nao vem em pdf, vem em html, que eh concatenado
depois de cabecalho.jspx com o seguinte codigo:

options.setOutputStream(resp.getOutputStream());
task.setRenderOption(options);


abraço,
by Carlos

Rafael Ponte

unread,
Oct 16, 2007, 1:39:59 PM10/16/07
to jav...@googlegroups.com
Ah tah! Detalhe que não tinha visto :)) rss, obrigado Carlos!
Mas acho que o Rodrigo queria um relatório em PDF mesmo, foi o que eu entendi.

Mas então Carlos, por que vocês resolveram usar o Birt no lugar do jasperreports de guerra?

On 10/16/07, Carlos Gregoreki <moor...@gmail.com> wrote:
abraço,
by Carlos







--
Rafael Ponte

Carlos Gregoreki

unread,
Oct 16, 2007, 2:12:01 PM10/16/07
to javasf: JavaServer Faces International Group
Hehehe...

certo..

Usamos BIRT porque têm-se demonstrado bem ativo no quesito de
desenvolvimento... o pessoal do Eclipse é Fera! ;)

Deve-se levar em consideração que o Birt já é business inteligence
desde seu inicio, coisa que o jasper começou a falar e desenvolver no
2º bimestre desse ano.

Birt tem uma flexibilidade enorme quanto aos databindings e as
tabelas..
ainda não experimentei, mas há boatos que pode colocar códigos e
ELexpressions dentro de um design...
percebe-se que o jasper compila o xml, coisa que o birt nao faz, mas
sim o roda em cima de uma plataforma java, que quem sabe é por isso
que permite essa ligacao. (sim, é uma plataforma meio que separada,
sempre é instalada em WEB-INF/platform )

E outra coisa...
o M.c.P , que era o chefe, é que decidia essas coisas também =D
qualquer coisa dá um tapa nele ;)

abraço,
by Carlos

Rafael Ponte

unread,
Oct 16, 2007, 2:25:22 PM10/16/07
to jav...@googlegroups.com
hahaha, e a M.C.P, comenta ae :)) rss

On 10/16/07, Carlos Gregoreki <moor...@gmail.com> wrote:
Rafael Ponte

Rodrigo Rosa

unread,
Oct 17, 2007, 8:32:21 AM10/17/07
to jav...@googlegroups.com
Rogério,

a título de teste quero implementar também dessa maneira que vc sugeriu, com popup. Mas, quando vc diz popup, é o componente do tomahawk? Por hora estou usando somente JSF e Woodstock por aqui... (e não, o woodstock não tem popup... =/ )

Como assim, "abrir a janela"? Vc faz um outro form p conter o popup? Tem um exemplo rápido aí? Estou olhando o exemplo do tomahawk mas não entendi essa parte de "abrir a janela" q vc citou...

Estou propenso a usar com popups mesmo, depois de pensar um pouco achei mais interessante.
Valeu!


rogerio...@gmail.com escreveu:

Rafael Ponte

unread,
Oct 17, 2007, 7:43:24 AM10/17/07
to jav...@googlegroups.com
O popup que ele fala é o conhecido window.popup(), saca?

Algumas pessoas chamam o modal (janelinha que abre sobre a principal e bloquea a tela) de popup também. O popup do Tomahawk é um div, então não cairia bem para o lance do relatório, você precisa o usar o window.popup().
--
Rafael Ponte

Erenildo

unread,
Sep 22, 2008, 5:51:02 PM9/22/08
to jav...@googlegroups.com
Olá a todos,
Estou um problema que não conseguindo exibir uma relatório que fiz
usando ireport + jasperreport na minha view jsf.
Tenho um commandButton que chama uma action do ManageBean, culo o
mesmo tem um metodo com o seguinte código:

System.out.println("Relatorio - 1!!");

FacesContext context = FacesContext.getCurrentInstance();

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

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

response.setContentType("application/pdf");
response.setHeader("Content-disposition",
"attachment;filename=Documento.pdf");

ServletOutputStream servletOutputStream =
response.getOutputStream();


Map parameters = new HashMap();
parameters.put("titulo", "Relatório de Documentos");

JasperRunManager.runReportToPdfStream(reportStream,
servletOutputStream,parameters,new JREmptyDataSource());

System.out.println("Relatorio - 2!!");

context.responseComplete();
//servletOutputStream.flush();
//servletOutputStream.close();


System.out.println("Relatorio - 3!!");

Conforme o código ele exibe todas as mensagens mensagens no console,
só que não exibe o relatório.

Alguém pode me ajudar !!!


---------- Forwarded message ----------
From: "Rafael Ponte" <rpo...@gmail.com>
Date: 17 out 2007, 08:43
Subject: JSF e Jasper Report
To: javasf: JavaServer Faces International Group


O popup que ele fala é o conhecido window.popup(), saca?

Algumas pessoas chamam o modal (janelinha que abre sobre a principal e
bloquea a tela) de popup também. O popup do Tomahawk é um div, então
não
cairia bem para o lance do relatório, você precisa o usar o
window.popup().

On 10/17/07, Rodrigo Rosa <rodr...@wonder.com.br> wrote:

> Rogério,

> a título de teste quero implementar também dessa maneira que vc sugeriu,
> com popup. Mas, quando vc diz popup, é o componente do tomahawk? Por hora
> estou usando somente JSF e Woodstock por aqui... (e não, o woodstock não tem
> popup... =/ )

> Como assim, "abrir a janela"? Vc faz um outro form p conter o popup? Tem
> um exemplo rápido aí? Estou olhando o exemplo do tomahawk mas não entendi
> essa parte de "abrir a janela" q vc citou...

> Estou propenso a usar com popups mesmo, depois de pensar um pouco achei
> mais interessante.
> Valeu!

> rogerio.ara...@gmail.com escreveu:

> Sempre abro um popup para relatórios iReport, funciona legal, é só no
> onclick abrir a janela e setar o target do commandLink com o nome da
> janela aberta.

Tiago Augusto Nogueira Coelho

unread,
Sep 22, 2008, 9:16:08 PM9/22/08
to jav...@googlegroups.com
Cara eu estou fazendo relatórios com o JasperReport e não tive
problemas para exibir. Espere até amanhã, no trabalho eu envio o
códido para você.

Erenildo Rios

unread,
Sep 23, 2008, 9:51:22 AM9/23/08
to jav...@googlegroups.com
Obrigado,
Pois estou garrado com esse problema aqui, eu fiz um relatório teste onde só quero exibir ele em um action, mas não exibe nada e não da erro.

Fico no aguardando o seu código.

at+.

2008/9/22 Tiago Augusto Nogueira Coelho <tiagoa...@gmail.com>


Cara eu estou fazendo relatórios com o JasperReport e não tive
problemas para exibir. Espere até amanhã, no trabalho eu envio o
códido para você.





--
Erenildo Rios
UCAM/Campos
Analista de Sistemas

Weksley Viana

unread,
Sep 23, 2008, 12:39:52 PM9/23/08
to jav...@googlegroups.com
Cara como posso fazer para enviar uma lista como parametros para o IReport. Gostaria de fazer algo do tipo:

SELECT ... FROM
WHERE paramentro IN listaDeParamentrosVindoDaActionJSF

Para passar apenas um parametro é tranquilo, o problema montar algo como a consulta acima, será que alguem poderia me dar uma ajuda?

Weksley Viana

2008/9/22 Tiago Augusto Nogueira Coelho <tiagoa...@gmail.com>

Wagner Santos

unread,
Sep 23, 2008, 12:47:25 PM9/23/08
to jav...@googlegroups.com
Voces já deram uma olhada nesse projeto: http://jasperreportjsf.sourceforge.net?
Ainda tá em alfa mas parace q já dá pra util.zar

Wagner Santos
MSN/Gtalk: wagner....@gmail.com
Skype: wagner.gsantos
Twitter: http://twitter.com/wagnergsantos
Site: http://www.geracaoelias.blog.br



2008/9/23 Weksley Viana <jogado...@gmail.com>

Weksley Viana

unread,
Sep 23, 2008, 2:09:33 PM9/23/08
to jav...@googlegroups.com
Eu ja tinha visto, mas não tem arquivo nenhum para baixar.

Weksley Viana

2008/9/23 Wagner Santos <wagner....@gmail.com>

Wagner Santos

unread,
Sep 23, 2008, 2:22:19 PM9/23/08
to jav...@googlegroups.com

Wagner Santos

unread,
Sep 23, 2008, 2:24:11 PM9/23/08
to jav...@googlegroups.com
Testem o projeto, e se possivel, postem o que acharam aqui, vou usa-lo em breve, mas ainda nao tive tempo pra isso.



Wagner Santos
MSN/Gtalk: wagner....@gmail.com
Skype: wagner.gsantos
Twitter: http://twitter.com/wagnergsantos
Site: http://www.geracaoelias.blog.br



2008/9/23 Wagner Santos <wagner....@gmail.com>

GHZ ATOMIC

unread,
Sep 24, 2008, 2:55:54 PM9/24/08
to jav...@googlegroups.com
Oi ... eu exibi o relatorio assim v ai c ajuda ... :
(...)
        JasperCompileManager jc = new JasperCompileManager();

        JasperPrint report = null;
        JRBeanCollectionDataSource jrbs = new JRBeanCollectionDataSource(resultado);
        report = JasperFillManager.fillReport(caminho, parametros, jrbs);
        //byte pdf[] = JasperExportManager.exportReportToPdf(report); 

        HttpServletResponse response = (HttpServletResponse) this.getContext().getExternalContext().getResponse();
        response.setContentType("application/pdf");
        ServletOutputStream ouputStream = response.getOutputStream();

        JRExporter exporter = new JRPdfExporter();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, report);
       
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
        exporter.exportReport();
        this.getContext().responseComplete();
(...)

q q coisa me avisa ! t+
2008/9/23 Wagner Santos <wagner....@gmail.com>

Erenildo Rios

unread,
Sep 24, 2008, 4:16:30 PM9/24/08
to jav...@googlegroups.com
Valeu ....
Descobri o meu problema aqui...é que eu uso os componentes do <a4j:form> e com isso o form todo não é submetido, fiz um teste usando o core <h:form> e funcionou legal.

Tem como eu usar o <h:commandButton> dentro do <a4j:form> ??/


at+.

2008/9/24 GHZ ATOMIC <ghza...@gmail.com>

Rafael Ponte

unread,
Sep 24, 2008, 4:30:48 PM9/24/08
to jav...@googlegroups.com
Sim.

2008/9/24 Erenildo Rios <eren...@gmail.com>



--
Rafael Ponte
http://www.rponte.com.br

Bruno Arueira

unread,
Sep 24, 2008, 4:39:57 PM9/24/08
to jav...@googlegroups.com
Tenho um problema semelhante, como poderia utilizar os dois que o Erenildo descreveu acima?

2008/9/24 Rafael Ponte <rpo...@gmail.com>



--
Bruno G. N. Arueira
blog: http://brunoarueira.wordpress.com

Marcos Carvalho

unread,
Sep 25, 2008, 9:45:40 AM9/25/08
to jav...@googlegroups.com
Bom dia,

         Aproveitando esse tópico. Estou fazendo um relatorio onde nele tem uma imagem e esta dando erro nessa imagem. Onde passo por parametro para o relatorio  o caminho da imagem.


Mensagem de erro:

Caused by: javax.faces.el.EvaluationException: javax.el.ELException: /relatorio/relatorioFrequenciaAnalitica.jspx @96,69 action="#{relarioFrequenciaMB.buscarPontosPorPeriodo}": java.lang.NoSuchMethodError: com.lowagie.text.Image.plainWidth()F
    at javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:79)
    at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:54)
    ... 37 more
Caused by: javax.el.ELException: /relatorio/relatorioFrequenciaAnalitica.jspx @96,69 action="#{relarioFrequenciaMB.buscarPontosPorPeriodo}": java.lang.NoSuchMethodError: com.lowagie.text.Image.plainWidth()F
    at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:74)
    at javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:75)
    ... 38 more
Caused by: java.lang.NoSuchMethodError: com.lowagie.text.Image.plainWidth()F
    at net.sf.jasperreports.engine.export.JRPdfExporter.exportImage(JRPdfExporter.java:1219)
    at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:675)
    at net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:641)
    at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:536)
    at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:323)
    at br.ueg.util.UtilFacesRelatorio.gerarRelatorioFaces(UtilFacesRelatorio.java:47)
    at br.ueg.relatorio.frequencia.RelarioFrequencia.gerarRelatorio(RelarioFrequencia.java:143)
    at br.ueg.relatorio.frequencia.RelarioFrequencia.buscarPontosPorPeriodo(RelarioFrequencia.java:220)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:131)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
    at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
    ... 39 more





2008/9/24 Bruno Arueira <bgnar...@gmail.com>



--

Atenciosamente,
Marcos Antonio R. de Carvalho Filho
Reply all
Reply to author
Forward
0 new messages