Tenho uma aplicação web usando JSF. Criei um relatório no iReport. Mas não estou sabendo como utilizar ele na web. Tenho uma página de consulta. Nessa página existem vários filtros e um botão. Eu queria que quando o botão fosse acionado a query fosse executada e a página com o relatório fosse aberta. Já está funcionado com a query sendo executada. Quando clico no botão a query é executada pelo Hibernate e é me retornada uma lista de Objetos. O problema é que não sei como atribuir esses objetos ao relatório do iReport e nem abrir esse relatório.
Entao amigo, o seu relatório é simplesmente uma lista exibindo o resultado da consulta? Ou Um relatorio com subReport e td mais?
Enfim, você pode passar uma lista para o relatório renderizala ou parametros, ou os 2.
Enfim, supondo q vc fez sua lista e possui uma colecao do objeto Funcionario.
// Lista a ser exportada
Collection lista = new ArrayList().
// Adicionando na lista de Funcionarios
list.add(new Funcionario("NOME1", "25", "RH"));
list.add(new Funcionario("NOME2", "22", "TI"));
list.add(new Funcionario("NOME3", "26", "FN"));
// Parametros do relatorio, no caso sem nenhum parametro
Map parameters = new HashMap();
// Gera o JasperPrint do relatorio
JasperPrint jasperPrint = JasperFillManager.fillReport("c:\\Relatorio.jasper", parameters, new JRBeanCollectionDataSource(lista));
// Criando arquivo PDF
byte bytes[] = JasperExportManager.exportReportToPdf(jasperPrint);
// Adicionando informações para o response p transferencia
response.addHeader("Content-Disposition", "attachment;filename=\"".concat("nomeRelatorio.pdf"));
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
response.getOutputStream().write(bytes);
response.getOutputStream().flush();
Como pego a response dentro da minha classe JAVA? Poque na minha classe FuncionarioBean, por exemplo, eu tenho a lista com os objetos mas não tenho a response.
// Parametros do relatorio, no caso sem nenhum parametro
Map parameters = new HashMap();
// Gera o JasperPrint do relatorio
JasperPrint jasperPrint = JasperFillManager.fillReport(“D:\solicitacao.jasper”, parameters, new JRBeanCollectionDataSource(lista));
// Criando arquivo PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, “D:\solicitacao.pdf”);
byte bytes[] = JasperExportManager.exportReportToPdf(jasperPrint);
// Adicionando informações para o response p transferencia
response.addHeader(“Content-Disposition”, “attachment;filename=”".concat(“solicitacao.pdf”));
response.setContentType(“application/pdf”);
response.setContentLength(bytes.length);
response.getOutputStream().write(bytes);
response.getOutputStream().flush();[/code]
java.lang.NullPointerException
at net.sf.jasperreports.engine.JRPropertiesMap.readObject(JRPropertiesMap.java:176)
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 java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1846)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1945)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1869)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1945)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1869)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1945)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1869)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:88)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:515)
at br.com.jdsistemas.sri.bean.SolicitacaoBean.imprimirRelatorio(SolicitacaoBean.java:95)
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:172)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
at javax.faces.component.UICommand.broadcast(UICommand.java:383)
at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321)
at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296)
at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253)
at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
Esse erro é gerado quando passa pela instrução:
JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(lista);//Aqui passa
JasperPrint jasperPrint = JasperFillManager.fillReport("D:/solicitacao.jasper", parameters, beanCollectionDataSource);//Aqui da erro
Bom naum sei se eh isso mas derrepente,
os campos no seu relatorio estao com os mesmos nomes do atribustos da lista que vc passa para o ireport??
por exemplo se sua lista for de um tipo Pessoa e contiver os atribustos nome e telefone la no seu relatorio vc tera que ter exatamente os values com este nomes.
Tentei fazer do geito que você falou fBarreto. Mas quando vou compilar o relatório, para gerar o arquivo JASPER, é informado que os campos não existem.
Já tentei de um tudo mas não consigo.
cara se ta dizendo que os campos nao existem ,pode ser pq vc criou os values mas naum alterou os nomes nos TextField.
Verifique se os values e os seus campos texto estao com as referencias corretas:
tipo se vc tem um value com nome Telefone entaum seu campo texto no relatorio que representa este cara tem que ter a seguinte expressao: