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 exportadaCollectionlista=newArrayList().// Adicionando na lista de Funcionarioslist.add(newFuncionario("NOME1","25","RH"));list.add(newFuncionario("NOME2","22","TI"));list.add(newFuncionario("NOME3","26","FN"));// Parametros do relatorio, no caso sem nenhum parametroMapparameters=newHashMap();// Gera o JasperPrint do relatorioJasperPrintjasperPrint=JasperFillManager.fillReport("c:\\Relatorio.jasper",parameters,newJRBeanCollectionDataSource(lista));// Criando arquivo PDFbytebytes[]=JasperExportManager.exportReportToPdf(jasperPrint);// Adicionando informações para o response p transferenciaresponse.addHeader("Content-Disposition","attachment;filename=\"".concat("nomeRelatorio.pdf"));response.setContentType("application/pdf");response.setContentLength(bytes.length);response.getOutputStream().write(bytes);response.getOutputStream().flush();
Qualquer duvida se puder ajudar, so falar.
Abraço.
Dassayev
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.
rdmardegam
Mas a propia classe FuncionarioBean vai ser responsavel por efetuar a exportação?
Se sim, tente passar o response para ela como parametro ou instanciar.
Dassayev
O meu código ficou assim:
publicvoidimprimirRelatorio(){try{SolicitacaoDAOsDao=(SolicitacaoDAO)this.getDao();Listlista=sDao.geraRelatorio(this.getSolicitacao());FacesContextcontext=FacesContext.getCurrentInstance();ServletResponseresponse=(ServletResponse)context.getExternalContext().getResponse();// Parametros do relatorio, no caso sem nenhum parametroMapparameters=newHashMap();// Gera o JasperPrint do relatorioJasperPrintjasperPrint=JasperFillManager.fillReport("c:\\Relatorio.jasper",parameters,newJRBeanCollectionDataSource(lista));// Criando arquivo PDFbytebytes[]=JasperExportManager.exportReportToPdf(jasperPrint);// Adicionando informações para o response p transferenciaresponse.addHeader("Content-Disposition","attachment;filename=\"".concat("nomeRelatorio.pdf"));response.setContentType("application/pdf");response.setContentLength(bytes.length);response.getOutputStream().write(bytes);response.getOutputStream().flush();}catch(Exceptione){e.printStackTrace();}}
O relatorio pelo menos está aparecendo em d:\solicitacao.pdf ?
Dassayev
Não!
rdmardegam
Era pelo menos para estar gravando neste diretório! Veja se o código está passando corretamente por este ponto.
Dassayev
Está gerando o seguinte erro:
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
Dassayev
Alguém teria alguma solução?
Desde já agradeço!!!
fbarreto
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.
Dassayev
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.
Dassayev
Alguém sabe como resolver isso pessoal?
L
lgweb
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: