Caros amigos, estou tentando colocar num mesmo relatório informações referentes a 2 bancos de dados, trabalho para um órgão vinculado a Educação e aplicamos provas de avaliação a cada semestre, então estou com os dados dessas avaliações do semestre passado e quero colocar num mesmo relatório os dados da avaliação que faremos nesse semestre. Eu já tenho os relatórios prontos, mas de apenas uma avaliação, quero então gerar um único relatório puxando dessas duas fontes de dados. Estou usando JPA + JSF.
Não coloque letras MAIÚSCULAS no título do tópico, isso é deselegante.
Não coloque URGENTE, RÁPIDO, PELO AMOR DE DEUS, VOU MORRER, é deselegante e inútil.
Por que não faz os selects e une os resultados de cada um em uma única Collection e então gera o relatório?
Olá amigo, grato pela lembrança!!
Quanto aos selects na collection vou ver se consigo fazer ambos trazendo os dados na mesma ordem.
vlw!!
As collections não implementam comparable? Você também pode fazer Collections.sort…
Basta que os resultados estejam armazenados em beans e estes implementem Comparable…
Ok, drsmachado conseguí implementar as listas, mas ai surgiu outra dúvida, eu estou passando para o relatório uma lista dentro de outra como abaixo:
questoes2 = aluDAO.getQuestoesAlunos(escola, turma, ano, turno);
questoes = aluDAO.getSelecaoAlunos(escola, turma, ano, turno);
questoes.addAll(questoes2);
//Passo para o collection datasurce
JRDataSource jrRS = new JRBeanCollectionDataSource(questoes);
Só que não encontrei nada na net mostrando como recupero esta lista questoes2 dentro de uma tabela no ireport que vai exibir os dados, porque cada prova será mostrada numa tabela. Fico grato se puder continuar me auxiliando
Por que simplesmente não vai ao javadoc e descobre o que o método addAll faz?
Por favor, não poste títulos INTEIRAMENTE EM LETRAS MAIÚSCULAS e nem peça urgência no fórum.
Oi Vini, eu tentei modificar depois o titulo, mas não encontrei como!!
drsmachado eu sei o que o addAll faz, desculpe-me se não me fiz entender completamente, eu quero saber como recupero as informações dentro do ireport? porque lá no ireport eu tenho uma variável do tipo collection que recebe a list questoes, mas não encontrei nada na net explicando como extrair os dados relativos a lista questoes2 que adicionei a lista questoes através do método addAll. Se eu usar somente os atributos que estão dentro da primeira lista(questoes) o relatório funciona, mas quando eu tento usar um atributo que está na segunda lista(questoes2) o ireport não reconhece. Espero ter sido mais claro .
Se expressou pessimamente.
Somente agora você disse que está usando atributos distintos (beans diferentes?).
Você sabe como o relatório associa cada $F{} com cada atributo do bean, certo? Se o atributo tiver nome diferente de um field, ele não será exibido.
Lembre-se que o iReport possui expressões que podem ser trabalhadas (é parecido com EL).
Sei sim, quanto a isto está tudo ok, estou puxando direto dos models os nomes dos campos, eu tenho um relatório que está funcionando normalmente com uma tabela que mostra os resultados do primeiro semestre, mas como falei antes, quero criar 2 tabelas no mesmo relatório, uma com o resultado de uma avaliação feita no primeiro semestre com uma turma de alunos, onde mostra a nota deles e outra tabela com os mesmos campos, mas referentes ao segundo semestre.Para um acompanhamento.
Atualmente tenho uma funcionando, mas não consigo mandar para o ireport a segunda consulta, quando mando usando o método AddAll dá erro, acho que é porque a lista que é gerada é muito grande ou porque não estou sabendo pegar os dados dessa lista dentro do relatório.
No meu banco está organizado da seguinte forma:
Tenho 2 tabelas referentes a prova do 1º semestre (aluno, questoes) e 2 tabelas referentes ao 2º semestre(aluno2,questoes2) .
se puder auxiliar fico grato
Cara, pela estrutura, penso que isto está uma bagunça.
De qualquer forma, se puder postar o erro, pode ajudar.
Minha Classe que faz as consultas e chama a classe responsável por gerar o relatório
public void gerarRelatorioConsolidadoPDF() throws ClassNotFoundException, SQLException {
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
ServletContext context = (ServletContext) externalContext.getContext();
arquivo = context.getRealPath("WEB-INF/relatorios/consolidado/consolidado.jasper");
this.questoes = new ArrayList();
this.questoes2 = new ArrayList();
questoes = aluDAO.getSelecaoAlunos(selectedAluno.getEscola(), selectedAluno.getTurma(), selectedAluno.getAno(), selectedAluno.getTurno());
questoes2 = aluDAO.getQuestoesAlunos(selectedAluno.getEscola(), selectedAluno.getTurma(), selectedAluno.getAno(), selectedAluno.getTurno());
questoes.addAll( alunos);
JRDataSource jrRS = new JRBeanCollectionDataSource(questoes);
String arquivo1 = FacesContext.getCurrentInstance().getExternalContext().getRealPath("WEB-INF"+ File.separator + "imagens" + File.separator + "crede.jpg");
File crede = new File(arquivo1);
System.out.println(crede.isFile());
String arquivo2 = FacesContext.getCurrentInstance().getExternalContext().getRealPath("WEB-INF"+ File.separator + "imagens" + File.separator + "seduc.jpg");
File seduc = new File(arquivo2);
System.out.println(seduc.isFile());
Map parameters = new HashMap();
parameters.put("crede",crede );
parameters.put("seduc", seduc);
parameters.put("questoes",questoes);
parameters.put("questoes2", questoes2);
gerarRelatorioWeb(jrRS, parameters, arquivo);
}
o Erro que gera quando envio pro IREPORT
SEVERE: Fill 999944671: exception
net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : apa1
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:123)
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:96)
at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:100)
at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:821)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:785)
at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1482)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:126)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:946)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:864)
at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:613)
at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59)
at net.sf.jasperreports.engine.fill.JRThreadSubreportRunner.run(JRThreadSubreportRunner.java:205)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NoSuchMethodException: Unknown property 'apa1' on class 'class MODEL.Aluno'
at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1313)
at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:762)
at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837)
at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426)
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111)
... 12 more
SEVERE: net.sf.jasperreports.engine.JRRuntimeException: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : apa1
at net.sf.jasperreports.engine.fill.JRFillSubreport.prepare(JRFillSubreport.java:711)
at net.sf.jasperreports.components.table.fill.FillTableSubreport.prepareSubreport(FillTableSubreport.java:156)
at net.sf.jasperreports.components.table.fill.FillTable.prepare(FillTable.java:306)
at net.sf.jasperreports.engine.fill.JRFillComponentElement.prepare(JRFillComponentElement.java:129)
at net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:329)
at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:419)
at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:378)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2038)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:760)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:270)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:128)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:946)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:864)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:84)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:624)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:605)
at net.sf.jasperreports.engine.JasperRunManager.runReportToPdfStream(JasperRunManager.java:370)
at ManagedBean.RelatorioFaces.gerarRelatorioWeb(RelatorioFaces.java:568)
at ManagedBean.RelatorioFaces.gerarRelatorioConsolidadoPDF(RelatorioFaces.java:147)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at javax.el.BeanELResolver.invokeMethod(BeanELResolver.java:779)
at javax.el.BeanELResolver.invoke(BeanELResolver.java:528)
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:257)
at com.sun.el.parser.AstValue.invoke(AstValue.java:248)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302)
at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39)
at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
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:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
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:593)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at util.JPAFilter.doFilter(JPAFilter.java:39)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.griz
SEVERE: zly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:722)
Caused by: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : apa1
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:123)
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:96)
at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:100)
at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:821)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:785)
at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1482)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:126)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:946)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:864)
at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:613)
at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59)
at net.sf.jasperreports.engine.fill.JRThreadSubreportRunner.run(JRThreadSubreportRunner.java:205)
... 1 more
Caused by: java.lang.NoSuchMethodException: Unknown property 'apa1' on class 'class MODEL.Aluno'
at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1313)
at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:762)
at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837)
at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426)
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111)
... 12 more
SEVERE: at net.sf.jasperrep
Cara realmente eu poderia ter feito bem mais estruturado, mas meu chefe pediu esse relatório de última hora.
Tô vendo mais críticas do que ajudas. Veja se isso é útil:
http://www.richardnichols.net/2010/02/simple-guide-to-sub-reports-in-jasperreports-ireport/
ele não encontra os campos da lista questoes2 que foi adicionada a lista questoes.
Sei lá, mesmo quando as coisas tem urgência negativa (aquelas para semana passada), eu ainda prezo pela qualidade. Enfim…
Viu esta linha?
Caused by: java.lang.NoSuchMethodException: Unknown property 'apa1' on class 'class MODEL.Aluno'
Ela diz que você está tentando acessar um atributo que não existe…
Me parece que você está juntando duas listas que contém objetos de classes diferentes, não?
Sim, é isso mesmo, são de beans diferentes. To tentando mandar uma lista de um tipo via JRBeanCollection e outra via MAP, mas não estou conseguindo receber essa lista do map no ireport, tem alguma dica sobre isso?
Quando você passa pelo map, está passando dados para os $P{} e não para os $F{}, logo, você precisa ter certeza que tudo está devidamente definido como parâmetro (e, pior, saber quantos parâmetros irá utilizar).
Enfim, eu ainda acho que essa tratativa está errada, você precisa colocar todos os parâmetros recebidos em beans iguais e resolver teu problema desta forma.
Pois é, tb acho que essa seja a melhor saída, mas já tenho os dados no banco referente ao semestre passado e o mapeamento está feito diferente do atual.Mas mesmo assim agradeço pela disponibilidade em auxiliar, o mundo é mais bonito quando uns auxiliam outros pelo simples prazer de fazer o bem. Vlw!, vou encerrar o tópico.