IReports - Duvida sobre passar um ArrayList [RESOLVIDO]

7 respostas
T

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  dentro

Vi uma opcoes de montar subRelatorio isso é completamente necessario?

O reports  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,  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!

7 Respostas

thiagocg

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

T
Hahahahahahahahaha

 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}  resolve?

Obrigado demais pela ajuda cara…
Keep it up!

thiagocg

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

T

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:

thiagocg

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

T

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

Valeus Thiago!

Abração!

thiagocg

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

[]'s

Criado 9 de fevereiro de 2010
Ultima resposta 9 de fev. de 2010
Respostas 7
Participantes 2