IReports - Duvida sobre passar um ArrayList [RESOLVIDO]

Olá Pessoal!

Eu sei que esse assunto é bem batido aqui, mas as coisas que eu achei sobre isso eram antigas,… acho q o reports já tem recursos para facilitar o trabalho…

O que quero fazer é passar um ArrayList de primitivos para o IReports ( mais simples impossivel… :oops: )…
Meu metodo está assim :

	public void gerarRelatorioRTF( Map <String, Object> parameters, List<Veiculo> veiculoList,	String nomeRelatorio){
		try{			
			InputStream reportStream = this.getClass().getResourceAsStream("/WEB-INF/relatorio/" + nomeRelatorio);
					
			JRBeanCollectionDataSource ds = new	JRBeanCollectionDataSource(veiculoList);
			
			JasperPrint jasperPrint = JasperFillManager.fillReport(reportStream, parameters, ds);	
		
			JRRtfExporter rtfExporter = new JRRtfExporter();
			
			rtfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
			rtfExporter.exportReport();				
		}catch(Exception e){			
		}		
	}

Bem simples…
nem ta completo ainda a parte de exportar…
Oq eu quero saber é como eu pego isso lá dentro…
Vi uma opcoes de montar subRelatorio… isso é completamente necessario?
O reports já possui um parametro chamado $P{REPORT_DATA_SOURCE}
Se vc for criar uma expressao com ele, ele te oferece dois metodos, o next() e o getFieldValue(JRField)
Me parecia perfeito… mas eu nao sei oq exatamente passar nesse JRField… achei q seria a string com o nome do camo relacioando ao objeto veiculo… mas nao era isso…
Se vc for fazera expressao automatica, dá isso:
$P{REPORT_DATA_SOURCE}.getFieldValue( net.sf.jasperreports.engine.JRField )

Estou seguindo pelo caminho errado? Acho q esse jeito deve ser bem mais facil de fazer…
Aguardo sugestoes…
Obrigado!

Olá thiefofwisdom, quando vc passa um ‘JRBeanCollectionDataSource’ como parametro para seu relatorio é so vc criar os ‘fields’ de acordo com cada propriedade do objeto que vc esta mandando dentro desse ‘JRBeanCollectionDataSource’. Por exemplo vc coloca cria um field idVeiculo, do tipo integer, e um field marca do tipo string (supondo que estes sejam os mesmos nomes e tipos de cada atributo que vc colocou na sua classe veiculo) e então é só colocar esses field’s criados na area do ‘Detail’ do seu relatorio.

Se entendi seu problema creio q seja esta a solução.

[]'s

Hahahahahahahahaha…
Só podia chamar Thiago mesmo… Vlws cara!
Acho q é isso sim… eu pensei nisso… mas achei estranho nao ter q fazer nenhum tipo de relacionamento entre o datasource e os fields…
No meu caso…
Tenho uma arrayList…
class Veiculo{
String nome;
Long id;
etc…
}
Entao se eu criar simplesmente um field chamado “nome”, o ireports ja vai procurar isso no datasource q eu tiver passado?
Um mero $F{nome} já resolve?

Obrigado demais pela ajuda cara…
Keep it up!

Sim, mas lembrando que esse $F{nome} tem q ser igual(nome e tipo do atributo) ao que vc esta usando no seu objeto, simples assim! :slight_smile:

Opa, esse nome é fera! hahahahah

[]'s

ai cara! q raiva! procurei umas boas horas na net por uma solucao simples assim e so achei coisa complexa…
Fica ai… resolvido entao…

Tava pensando… se dentro desse obejto da lista eu tiver outro objeto… o pessoal o IReports nao foi gentil o suficiente pra fazer algo assim nao né? $F{objeto.propriedade} ou algo do tipo…

meu nome é thiago tbem… :slight_smile:

Eu geralmente crio um classe não persistente para os relatorios para eu passar apenas as propriedades que eu preciso, evitando de passar o objeto inteiro, dai eu não tenho esse problema que vc relatou do relacionamento, quando crio esse meu objeto do relatorio ja monto ele com todas as informações que serão exibidas no relatorio.

[]'s

Dica boa… dica boa… ja tinha lido algo assim…

Valeus Thiago!

Abração!

é mais ou menos, isso aqui:
http://java.sun.com/blueprints/corej2eepatterns/Patterns/TransferObject.html

[]'s