JRBeanCollectionDataSource BCD = new JRBeanCollectionDataSource(minhaColecao);
Hashtable ht = new Hashtable();
ht.put(“colecaoDeclaradaComoParametroNoRelatorio”, BCD);
obs.: essa “colecaoDeclaradaComoParametroNoRelatorio” de ser do tipo java.lang.Object
F
fabiolucio9
observe que se sua coleção for de Pessoa por exemplo:::
Pessoa p = new Pessoa();
p.setNome(“nome”);
p.setIdade(13);
p.setEndereco(“rua”);
.
.
.
LinkedList lista = new LinkedList();
lista.add§;
No seu sub-relatório vc tem q ter parametro com o mesmo nome/tipo dos atributos de Pessoa.
por exemplo:
lá no ireport vc tem q ter parâmetro nome do tipo String, idade do tipo Integer, endereco do tipo String…
aí no seu relatório vc chama o sub-relatório…
E
ebarros
Acho q vc vai ter q fazer algo do tipo assim:
criar um arrayList do tipo da classe.
List listRelatorio = new ArrayList();
depois vc vai add o seu objeto do qual vc usou para setar os beans listRelatorio.add(rel);
Passa os parametros q vc tem q passar, ou seja, uma data ou imagem, sei lah.
Collections.sort(listRelatorio, new RelatorioComparator());
Map<String, Object> parametros = new HashMap<String, Object>();
parametros.put(“dataInicio”,dataInicio);
parametros.put(“dataFim”,dataFim);
Ai vc cria seu objeto do tipo JRBeanCollectionDataSource e passa como parametro seu arrayList.
JRDataSource jrds = new JRBeanCollectionDataSource(listRelatorio);
Ok… entendi… mas meu problema é maior… pq eu já uso um dataSource… é nele que tenho minha coleção dentro… e não consigo acessar tipo objetoJavaBean.myCollection.name no relatorio…
Isso é que é pior…
E
ebarros
mas na onde vc criou o datasource no iReport ou vc ta usando classe java para tal funçao?
N
Nino1
Classe Java…
Tipo nessa coleção que eu passo para o JRBeanCollectionDataSource, dentro dela eu tenho uma Collection… e não sei como pegar as informações dessa coleção…
Muito Obrigado pelo ajuda…
E
ebarros
Vc estah usando mapeamento de classes, se estiver, faça uma classe setar os beans, qdo vc setar todos os benas possiveis num laço, vc adiciona o seu arraylist no seu datasource assim vc ira conseguir acessar os beans setados no jasper.
Qualquer duvida eu posto um exemplo de como fazer.
At!
N
Nino1
Vc poderia passar esse exemplo?
E
ebarros
Cara foi mal pela demora. Segue abaixo um exemplo de relatorios jasper usando coleção espero q ajude dessa vez..
packagerelatorios;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.logging.Logger;importjavax.faces.context.FacesContext;importjavax.faces.event.ActionEvent;importjavax.servlet.ServletContext;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletResponse;//use os imports necessarios do jasperimportpmcg.imti.webtribus.view.Parcela;@SuppressWarnings("unchecked")publicclassrelTesteReportextendsHttpServlet{privateStringparcela;privateStringlanc;privateList<Parcela>listaParcela;publicrelTesteReport(){super();}@SuppressWarnings("unused")publicvoidimprimir(ActionEventevent){/*nesse caso estou usando framework jsf para interfaces*/FacesContextfacesContext=javax.faces.context.FacesContext.getCurrentInstance();ServletContextservletContext=(ServletContext)facesContext.getExternalContext().getContext();StringpathRel=servletContext.getRealPath("webservice\birt\relParc.jasper");HttpServletResponseresponse=(HttpServletResponse)facesContext.getExternalContext().getResponse();Mapmap=null;List<relTesteReport>listBirt=newArrayList<relTesteReport>();try{//outra observacao eh q para eu acessar minha interface eu uso um determinado metodo //instanciado, nesse caso vc usa o seu metodo que faz conexao com a inteface e passa // os parametros necessarios listaParcela=ServiceFactory.getParcelaService().buscaPorDataUsrFormaRec(dataInicio,dataFim,parcelas);for(inti=0;i<listaParcela.size();i++){relTesteReportrelTeste=newrelTesteReport();relTeste.setParcela(listaParcela.get(i).getParcela());relTeste.setLanc(listaParcela.get(i).getIdlanc());listBirt.add(relTeste);}}catch(Exceptione){e.printStackTrace();}Map<String,Object>parametros=newHashMap<String,Object>();parametros.put("dataInicio",dataInicio);parametros.put("dataFim",dataFim);parametros.put("parcelas",parcelas);JRDataSourcejrds=newJRBeanCollectionDataSource(listFechamentoCaixa);try{if(listaParcela!=null&&listaParcela.size()>0){JasperPrintprint=JasperFillManager.fillReport(pathRel,parametros,jrds);byte[]bytes=JasperExportManager.exportReportToPdf(print);//writeBytesAsAttachedTextFile eh uma classe q eu desenvolvi para imprimir os bytes no momento//download junto a nome do arquivo com extensao PDFwriteBytesAsAttachedTextFile(bytes,"RelatorioFechamentoCaixa.pdf");}else{Formatf=newSimpleDateFormat("dd/MM/yyyy");thrownewException("Não existe parcelas no intervalo de "+f.format(dataInicio)+" a "+f.format(dataFim));}}catch(Exceptione){e.printStackTrace();}publicvoidlimpaCampos(ActionEventevent){try{dataInicio=null;dataFim=null;filtroUsuario="";filtroFormaRecebimento="";}catch(Exceptione){e.printStackTrace();}}publicStringgetParcela(){returnparcela;}publicvoidsetParcela(Stringparcela){this.parcela=parcela;}publicStringgetLanc(){returnlanc;}publicvoidsetLanc(Stringlanc){this.lanc=lanc;}publicList<Parcela>getListaParcela(){returnlistaParcela;}publicvoidsetListaParcela(List<Parcela>listaParcela){this.listaParcela=listaParcela;}}