Boa noite amigos !
Estou com um probleminha chato de resolver, não trabalhei com relatórios ainda e logo de cara estou tentando fazer um em JPA, implementei algumas coisa, porém ainda não funcionaram.
Seguinte toda vez que mando gerar um relatório pela aplicação, o mesmo retorna um mensagem que o relatório não tem nenhuma página. Testei no ireport e funciona, somente na aplicação web que não estou conseguindo. (Acho que estou comendo bronha, porém sou novo nisto). Detalhe: o relatório recebe dois parametros dataInicial dataFinal.
Segue abaixo os códigos caso alguém consiga me ajudar.
Abraços
Everson
package br.com.agenda.bean;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.servlet.ServletContext;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.query.JRJpaQueryExecuterFactory;
import net.sf.jasperreports.view.JasperViewer;
import br.com.agenda.infra.JPAUtil;
@ManagedBean
@ViewScoped
public class RelatorioMB {
// private Date dataInicial;
// private Date dataFinal;
private FacesContext context;
private String caminhoRelatorio;
private Date dataInicial;
private Date dataFinal;
public void geraRelatorio() {
try {
context = FacesContext.getCurrentInstance();
ServletContext sc = (ServletContext) context.getExternalContext()
.getContext();
caminhoRelatorio = sc.getRealPath("/relatorios/contatos.jasper");
Map hints = new HashMap();
hints.put("dataInicial", dataInicial);
hints.put("dataFinal", dataFinal);
Map parameters = new HashMap();
EntityManager em = new JPAUtil().getEntityManager();
parameters.put(
JRJpaQueryExecuterFactory.PARAMETER_JPA_ENTITY_MANAGER, em);
parameters.put(
JRJpaQueryExecuterFactory.PARAMETER_JPA_QUERY_HINTS_MAP,
hints);
JasperRunManager.runReportToPdfFile(caminhoRelatorio, parameters);
System.out.println("Gerando relatório");
JasperPrint jasperPrint = JasperFillManager.fillReport(
caminhoRelatorio, parameters);
JasperViewer.viewReport(jasperPrint);
} catch (Exception e) {
e.printStackTrace();
}
}
public FacesContext getContext() {
return context;
}
public void setContext(FacesContext context) {
this.context = context;
}
public String getCaminhoRelatorio() {
return caminhoRelatorio;
}
public void setCaminhoRelatorio(String caminhoRelatorio) {
this.caminhoRelatorio = caminhoRelatorio;
}
public Date getDataInicial() {
return dataInicial;
}
public void setDataInicial(Date dataInicial) {
this.dataInicial = dataInicial;
}
public Date getDataFinal() {
return dataFinal;
}
public void setDataFinal(Date dataFinal) {
this.dataFinal = dataFinal;
}
}
como vc ta utilizando JPA, entao faz o seguinte, faça a sua query no java e peguei seu arraylist e passe para o ireport, segue um metodo que eu fiz para fazer o relatorio como download
por exemplo, vc vai fazer um consulta hql com JPA e essa consulta vai te retornar um List, com isso vc vai criar um Objeto JRBeanCollectionDataSource e passar essa lista, o outro parametro é o nome do arquivo .jasper (o arquivo deve estar nesse caso na pasta abaixo do WebContent, chamada relatorio) e ultimo parametro é o hashmap com parametros que possa passar ao ireport.
esse metodo vai disponibilizar para download o arquivo pdf gerado.
java.lang.NullPointerException
at net.sf.jasperreports.engine.fill.JRFillImage.evaluateImage(JRFillImage.java:1034)
at net.sf.jasperreports.engine.fill.JRFillImage.evaluate(JRFillImage.java:1004)
at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:258)
at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:499)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillBandNoOverflow(JRVerticalFiller.java:439)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillPageHeader(JRVerticalFiller.java:403)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:166)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:946)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:118)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:435)
at net.sf.jasperreports.engine.JasperRunManager.runReportToPdfFile(JasperRunManager.java:98)
at br.com.agenda.bean.RelatorioMB.geraRelatorio(RelatorioMB.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Fiz deste jeito, não consegui muito bem a implementação do seu.
public void geraRelatorio() {
try {
HttpServletResponse response = null;
EntityManager em = new JPAUtil().getEntityManager();
em.getTransaction().begin();
Map hints = new HashMap();
Date inicio = new Date("1979/10/01");
hints.put("dataInicial", inicio);
Date fim = new Date("2011/11/07");
hints.put("dataFinal", fim);
Map parameters = new HashMap();
parameters.put(
JRJpaQueryExecuterFactory.PARAMETER_JPA_ENTITY_MANAGER, em);
parameters.put(
JRJpaQueryExecuterFactory.PARAMETER_JPA_QUERY_HINTS_MAP,
hints);
JasperReport pathjrxml = JasperCompileManager
.compileReport("C:/workspace_Indigo/relatorios/contatos.jrxml");
JasperPrint printReport = JasperFillManager.fillReport(
pathjrxml, parameters);
JasperExportManager.exportReportToPdfFile(printReport,
"C:/contatos.pdf");
System.out.println("Gerando relatório");
byte[] dados = JasperExportManager.exportReportToPdf(printReport);
em.close();
response.setContentType("application/pdf");
ServletOutputStream saida = response.getOutputStream();
saida.write(dados);
saida.flush();
saida.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Parece estar funcionando, porém esta dando o seguinte erro agora:
log4j:WARN No appenders could be found for logger (org.hibernate.type.BasicTypeRegistry).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file:
1. Cannot cast from Date to String
value = (java.lang.String)(new java.util.Date()); //$JR_EXPR_ID=11$
<-------------------------------------->
2. Cannot cast from Integer to String
value = (java.lang.String)(((java.lang.Integer)variable_PAGE_NUMBER.getValue())); //$JR_EXPR_ID=12$
<---------------------------------------------------------------------->
3. Cannot cast from Integer to String
value = (java.lang.String)(((java.lang.Integer)field_contato_id.getValue())); //$JR_EXPR_ID=14$
<------------------------------------------------------------------>
4. Cannot cast from Timestamp to String
value = (java.lang.String)(((java.sql.Timestamp)field_contato_nascimento.getValue())); //$JR_EXPR_ID=19$
<--------------------------------------------------------------------------->
5. Cannot cast from Date to String
value = (java.lang.String)(new java.util.Date()); //$JR_EXPR_ID=11$
<-------------------------------------->
6. Cannot cast from Integer to String
value = (java.lang.String)(((java.lang.Integer)variable_PAGE_NUMBER.getOldValue())); //$JR_EXPR_ID=12$
<------------------------------------------------------------------------->
7. Cannot cast from Integer to String
value = (java.lang.String)(((java.lang.Integer)field_contato_id.getOldValue())); //$JR_EXPR_ID=14$
<--------------------------------------------------------------------->
8. Cannot cast from Timestamp to String
value = (java.lang.String)(((java.sql.Timestamp)field_contato_nascimento.getOldValue())); //$JR_EXPR_ID=19$
<------------------------------------------------------------------------------>
9. Cannot cast from Date to String
value = (java.lang.String)(new java.util.Date()); //$JR_EXPR_ID=11$
<-------------------------------------->
10. Cannot cast from Integer to String
value = (java.lang.String)(((java.lang.Integer)variable_PAGE_NUMBER.getEstimatedValue())); //$JR_EXPR_ID=12$
<------------------------------------------------------------------------------->
11. Cannot cast from Integer to String
value = (java.lang.String)(((java.lang.Integer)field_contato_id.getValue())); //$JR_EXPR_ID=14$
<------------------------------------------------------------------>
12. Cannot cast from Timestamp to String
value = (java.lang.String)(((java.sql.Timestamp)field_contato_nascimento.getValue())); //$JR_EXPR_ID=19$
<--------------------------------------------------------------------------->
12 errors
at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:191)
at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:215)
at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:148)
at br.com.agenda.bean.RelatorioMB.geraRelatorio(RelatorioMB.java:48)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Relatório no iReport ou BIRT é como receita de bolo. Tem que seguir… Você fez ou não fez FJ-11 e FJ-21 ?
Tá parecendo que não. Tem vários erros de cast.
O objetivo do grupo é compartilhar informação, prefiro desconsiderar alguns comentários infelizes.
Obrigado Alisson, conforme voce comentou o erro estava [size=18]realmente no Relatório do Ireport[/size]