IReport - Subreport - Lista dentro de Lista usando JRBeanCollectionDataSource [RESOLVIDO]

31 respostas
W

Olá a todos…

Pessoal estou criando um relatório que possui um subreport.
Basicamente eu tenho uma lista de objetos e em cada objeto eu tenho uma outra lista de objetos.

Vejam o código:

List<BeneficiarioTO> listaBeneficiarios = bo.findAllConsumoMensalBenefiario("32362", "2009-09-01");
		
for(BeneficiarioTO toAux : listaBeneficiarios){
	List<ExtratoTO> listaExtratos = bo.findAllExtradoUtilizacaoBenefiario("32362", "2009-09-01");
	toAux.setListaExtratos(listaExtratos);
}
		
JRBeanCollectionDataSource beanDataSource = new JRBeanCollectionDataSource(listaBeneficiarios);
		
//Parâmetros do relatório - Nao passo nenhum
Map parametros = new HashMap();

String arquivo = "C:/Trabalhos/projetos/portalrh/WebContent/relatorios/relatorioExtratoBeneficiario.jasper";
		
JasperPrint reportToPrint = JasperFillManager.fillReport(arquivo, parametros, beanDataSource);

No meu relatório pricipal eu tenho 3 filds : nome (do tipo String), matrícula (do tipo String) e listaExtratos (do tipo java.util.List).
No meu subreport eu coloquei apenas um fild que é do tipo String e coloquei o connection type como “use datasource expression” e em Data Source Expression eu coloquei $F{listaExtratos}.

Quando eu rodo o relatório acontede o seguinte erro:

Exception in thread "main" net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression : 
	Source text : $F{listaExtratos}

Alguêm sabe o motivo do erro?

Obrigado.

31 Respostas

F

Isso ocorre na hora de compilar seu relatório?

W

O erro ocorre quando eu executo o relatório.

W

Pessola consegui!!! :lol:

Segue a solução:

A minha classe BeneficiarioTO possui os seguintes atribusto:

private String matricula;

private String nome;

List<ExtratoTO> listaExtratos;

No IReport eu mapiei os dois primeiro com String e o atributo listaExtratos como java.util.List.

Agora o pulo do gato: Inseri o subreport e coloquei as seguintes propriedades:

connection type: use datasource
data souce expression: new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listaExtratos})

No subrepostes eu coloquei os atritutos contidos no meu objeto ExtratoTO com os mesmo data types.

E funcionou! :lol:

Obrigado e um abraço para todos.

T

Olá warley, cara, revivendo este seu post, estou conseguindo gerar o relatorio seguindo o que vc passou neste post, so não to conseguindo pegar dinamicamente o subrelatorio para exibição, quando seto na mão o caminho absoluto do arquivo ai funciona legal, mas quando tento por o contexto da minha aplicação web ele não encontra o .jasper e ele esta la sim.

Como vc fez pra pegar dinamicamente o subrelatorio???

[]'s

A

Pelo que eu pude entender você quer pegar o Jasper pelo contexto, pegar o path dele e mandar pro relatório principal. É isso? Se for isso, você pode criar um parâmetro dentro do relatório, colocar esse parâmetro como caminho pro subrelatório e, quando for executar a aplicação, pegar no contexto, obter o path e setar o parâmetro.

T

Olá Andre, mesmo eu setando manualmente ou pegando o contexto pelo faces, ele não consegue achar o subrelatorio, e sim eu estou passando o caminho dele por um parametro do relatorio principal, o que é estranho pois o sub relatorio esta no mesmo diretorio que o relatorio principal (/meuContexto/relatorios) e este é encontrado na pasta do contexto normalmente. E para o subrelatorio eu estou tendo de setar o caminho absoluto da pasta que contem o arquivo.

Obrigado pela ajuda!

[]'s

A

Humm… Estranho.
Se o sub está na mesma pasta em que o relatório principal, você só precisa colocar o nome do Jasper no parâmetro (no próprio iReport mesmo). Dá uma olhada se ele muda no XML isso também… Eu fiz algumas vezes e passei algumas horas até descobrir que não estava alterando no xml.

T

No ireport eu utilizo um parametro que passa o caminho do subrelatorio, acho q é o padrão do ireport quando vc cria um subrelatorio, pois ele mesmo criou esse parametro pra mim quando criei o subrelatorio. Quanto ao “xml” que vc se refere seria o “.jrxml” ???

Mais uma vez obrigado pela ajuda!

[]'s

A

Sim, o jrxml.
Se todos estiver em /home/user/app/reports (todos os jaspers, eu quero dizer), no seu relatório só deve ter o nome dos subrelatórios. Mais nada. Não precisa de parâmetro, nem nada. Você só precisa usar parâmetros quando os reports estão em lugares diferentes (ou podem mudar… quando você coloca num ear, por exemplo).

L

Revivendo novamente…

No relatorio principal, vc falou q colocou FIELDS né… Mas assim, vc alimentou esse fields como ?
Pq se vc não colocar uma fonte de dado, ele não compila
ele fala assim:
Field not found: “nomeDoField”

Tentei trocar. No lugar de TextField, eu coloquei Parameters. Assim no Ireport ele compila, mas o relatorio fica todo em branco quando executo a aplicação.

Tem com vc me ajudar?

abraço.

T

Olá Lazaro, os Fields são realmente necessarios pois eles representam a sua coleção que estiver sendo passada ao relatorio em tempo de execução, talves o que possa estar acontecendo é vc estar inserindo um field não declarado no seu relatorio, ou mesmo se for em tempo de execução em sua coleção o objeto que estiver sendo passado deve possuir uma correspondencia entre cada field e uma propriedade de seu objeto.

[]'s

L

Mas velho… se eu colocar o field na mão, o Ireport não gera o .jasper

E estou passo o .jasper pro aplicação…

Devo então passar o .jrxml e mandar ele compilar o jasper??

daí ele vai pegar o field e atriduir ao campo nome da minha classe…

será q é isso ?

T

Lazaro, vc esta utilizando o ireport certo?
Voce consegue compilar e rodar a partir de sua aplicação sem adicionar o subrelatorio? Isto usando o Field?

Vamos tentar eliminar as coisas aos poucos…rsrsrs

[]'s

L

Não consigo, pois passo para a minha aplicação o .jasper

E se eu coloco no Ireport, os fields e tento compilar para gerar o jasper ele fala q o field não foi encontrado…

=/

T

Bom, vamos voltar mais um pouquinho:

1º. vc ja utilizou o jasper / ireport antes, tem um bom conhecimento de como criar relatorios com ele?

2º. vc ja verificou se seu objeto que esta sendo passado para o relatorio atraves do seu JRBeanCollectionDataSource tem as propriedades iguais as declaradas no seu relatorio (nome atributo = nome do field no caso)

Sei que podem parecer bobas estas perguntas, mas fica dificil achar um erro sem conhecer realmente seu problema, pois no erro q vc passou ele da a impressão que ele não esta encontrando uma correspondencia entre a field e seu objeto.

L

thiagocg:
Bom, vamos voltar mais um pouquinho:

1º. vc ja utilizou o jasper / ireport antes, tem um bom conhecimento de como criar relatorios com ele?

2º. vc ja verificou se seu objeto que esta sendo passado para o relatorio atraves do seu JRBeanCollectionDataSource tem as propriedades iguais as declaradas no seu relatorio (nome atributo = nome do field no caso)

Sei que podem parecer bobas estas perguntas, mas fica dificil achar um erro sem conhecer realmente seu problema, pois no erro q vc passou ele da a impressão que ele não esta encontrando uma correspondencia entre a field e seu objeto.

Então Tiago

1º Já utilizei o Jasper / Ireport antes, mas era tudo versão antiga. Agora estou usando tudo novo.

2º Já verifiquei isso sim.
Coloquei no ireport “$F{nome}”, “$F{dependentes}”.
Na minha classe Java eu tenho: “protected String nome;” e “protected List dependentes;”

Vou postar meu codigo aki

public class Main {

	private static final String CAMINHO_PDF = "C:\\AMBIENTE SISOUVIDOR\\RELATORIO\\relatorio.pdf";
//	private static final String CAMINHO_JASPER = "C:\\AMBIENTE SISOUVIDOR\\RELATORIO\\report1.jasper";
	private static final String CAMINHO_JRXML = "C:\\AMBIENTE SISOUVIDOR\\RELATORIO\\report1.jrxml";
	public static void main(String[] args) throws Exception {
		ClienteDao clienteDao = new ClienteDao();
		List<Cliente> clientes = montarDados(clienteDao);
		
		limparPasta();
		JasperPrint montarRelatorio = montarRelatorio(clientes);
		gerarRelatorio(montarRelatorio);
		System.out.println(" fim ");
	}

	private static void limparPasta() {
		File file = new File(CAMINHO_PDF);
		if(file.exists())
			file.delete();
	}

	private static void gerarRelatorio(JasperPrint reportToPrint) throws JRException, IOException {
		File f = new File(CAMINHO_PDF);
		byte[] bytes = JasperExportManager.exportReportToPdf(reportToPrint);
		FileOutputStream out = new FileOutputStream(f);
		out.write(bytes);
	}

	@SuppressWarnings("unchecked")
	private static JasperPrint montarRelatorio(List<Cliente> clientes) throws JRException, FileNotFoundException {
		JRBeanCollectionDataSource beanDataSource = new JRBeanCollectionDataSource(clientes);
		Map parametros = new HashMap();		
		JasperDesign design = JRXmlLoader.load(CAMINHO_JRXML);
		JasperReport report = JasperCompileManager.compileReport(design);
		return JasperFillManager.fillReport(report,parametros, beanDataSource);
	}

	@SuppressWarnings("unchecked")
	private static List<Cliente> montarDados(GenericDao<?> dao)
			throws Exception {
		List<Cliente> lista = (List<Cliente>) dao.list();
		for (Cliente clienteAux : lista) {
			clienteAux.getDependentes();
		}
		return lista;
	}

}

o erro é:

Exception in thread "main" net.sf.jasperreports.engine.design.JRValidationException: Report design not valid : 
	 1. Field not found : nome
	 2. Field not found : dependentes
	 3. Field not found : dependentes
	at net.sf.jasperreports.engine.design.JRAbstractCompiler.verifyDesign(JRAbstractCompiler.java:258)
	at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:140)
	at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:215)
	at br.com.netx.prototipo.relatorio.Main.montarRelatorio(Main.java:57)
	at br.com.netx.prototipo.relatorio.Main.main(Main.java:34)

E muito obrigado pela atenção.

T

private static List<Cliente> montarDados(GenericDao<?> dao) throws Exception { List<Cliente> lista = (List<Cliente>) dao.list(); for (Cliente clienteAux : lista) { clienteAux.getDependentes(); } return lista; }
1º. No seu metodo getDependentes() vc ta atribuindo os dependentes que retornam a sua lista que esta sendo retornada para o metodo de construção do JRBeanCollectionDataSource? Pois aparentemente vc esta pegando os dependentes mas não esta atribuindo a nada.

2º. O seu objeto cliente tem um um atributo nome e um metodo publico getNome() ???

3º. Faz um print do seu relatorio do jasper mostrando o relatorio e os fields declarados pra eu dar uma olhada.

[]'s

L

thiagocg:
private static List<Cliente> montarDados(GenericDao<?> dao) throws Exception { List<Cliente> lista = (List<Cliente>) dao.list(); for (Cliente clienteAux : lista) { clienteAux.getDependentes(); } return lista; }
1º. No seu metodo getDependentes() vc ta atribuindo os dependentes que retornam a sua lista que esta sendo retornada para o metodo de construção do JRBeanCollectionDataSource? Pois aparentemente vc esta pegando os dependentes mas não esta atribuindo a nada.

2º. O seu objeto cliente tem um um atributo nome e um metodo publico getNome() ???

3º. Faz um print do seu relatorio do jasper mostrando o relatorio e os fields declarados pra eu dar uma olhada.

[]'s

Vamos lá…

1º Fiz um debbuger nessa lista aí. E ele está retornando a lista sim… Completa, com o objeto CLiente e seus respectivos dependentes. Daí eu passei essa lista pro JRBeanCollectionDataSource:

private static JasperPrint montarRelatorio(List<Cliente> clientes) throws JRException, FileNotFoundException {
		JRBeanCollectionDataSource beanDataSource = new JRBeanCollectionDataSource(clientes);

Nessa lista, eu tenho o objeto CLiente e dentro dela varios Dependentes. Isso está correto né?

2º Meu objeto tem sim o get e o set do atributo nome:

public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}

3º QUer um print do Ireport?

Abraço

T

esse field dependentes ai no seu relatorio não vai funcionar, ele tem q ser passado para o subrelatorio conforme o 4º post desta discussão, como segue abaixo:

A minha classe BeneficiarioTO possui os seguintes atribusto:

private String matricula;

private String nome;

List listaExtratos;

No IReport eu mapiei os dois primeiro com String e o atributo listaExtratos como java.util.List.

Agora o pulo do gato: Inseri o subreport e coloquei as seguintes propriedades:

connection type: use datasource
data souce expression: new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listaExtratos})

No subrepostes eu coloquei os atritutos contidos no meu objeto ExtratoTO com os mesmo data types.

So seguir isso q vai funcionar.

[]'s

L

Tiago…

A para rodou aki.

Sabe oq não estava dando certo. É pq eu criei os TextField na mão. Peguei na palheta e arrastei pro relatorio… Daí ele apenas criava o field e só.

Daí eu fui lá na Report Query, na segunda aba chamada JavaBean Datasource e coloquei minha classe Cliente lá…

daí peguei os atributos q eu queria…

daí funfou…

MUITO OBRIGADO PELA AJUDA…

tirou meu pescoço da corda…

valew MESMO!!

T

Legal cara, parabéns!
Pra isto é o forum, ajudar e ser ajudado!

Grande abraço!

P

Estou tendo um problema semelhante. Tenho um relatório mestre e com dois subrelatórios. Setei dois parâmetros no mestre com o tipo java.util.List e o atributo “Data Source Expression” dos subreports como “new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{nomeParametro})”.
Quando tento executar meu relatório da aplicação vem o seguinte erro:

net.sf.jasperreports.engine.JRException: Incompatible net.sf.jasperreports.engine.data.JRBeanCollectionDataSource value assigned to parameter favorecidos in the reqPedidoDeslocamento dataset.

Estou usando jsf 1.2 e iReport 3.7.1., e jasperreports 3.1.2.jar

C

Bom dia, estou revivendo esse tópico pq me deparei com um problema que acredito que a solução seja simples. Tenho uma classe pedido que possui como atributo uma lista de itens pedido. Quero fazer um relatorio usando Javabeans que liste os pedidos e um subrelatorio com JRBeanCollectionDataSource. Criei um field listaItensPedido que representa o list e estou passando para o subrelatorio atraves da expressão:

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listaItensPedido})

Porem o maldito no ireport 3.6.1 fica dando essa exceção:

Error loading the report template

Message:

net.sf.jasperreports.engine.JRException: org.xml.sax.SAXParseException: Invalid encoding name UTF8.

Level:

SEVERE

Stack Trace:

org.xml.sax.SAXParseException: Invalid encoding name UTF8.

net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:239)

net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:222)

net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:210)

com.jaspersoft.ireport.designer.JrxmlLoader.reloadJasperDesign(JrxmlLoader.java:87)

com.jaspersoft.ireport.designer.JrxmlVisualView.run(JrxmlVisualView.java:505)

org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572)

org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997)

Invalid encoding name UTF8.

org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)

org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)

org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)

org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)

org.apache.xerces.impl.XMLEntityManager.createReader(Unknown Source)

org.apache.xerces.impl.XMLEntityManager$ScannedEntity.setReader(Unknown Source)

org.apache.xerces.impl.XMLEntityScanner.setEncoding(Unknown Source)

org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanXMLDeclOrTextDecl(Unknown Source)

org.apache.xerces.impl.XMLDocumentScannerImpl$XMLDeclDispatcher.dispatch(Unknown Source)

org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)

org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)

org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)

org.apache.xerces.parsers.XMLParser.parse(Unknown Source)

org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)

org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)

org.apache.commons.digester.Digester.parse(Digester.java:1647)

net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:235)

net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:222)

net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:210)

com.jaspersoft.ireport.designer.JrxmlLoader.reloadJasperDesign(JrxmlLoader.java:87)

com.jaspersoft.ireport.designer.JrxmlVisualView.run(JrxmlVisualView.java:505)

org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572)

org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997)

Alguem pode me ajudar???

T

ccefetpb, por padrão o ireport seta o relatorio como UTF-8 e não como UTF8 como esta no seu stacktrace.

Da uma olhada nas propriedades do relatorio, dentro de propriedades vc vai encontrar uma opção properties (isso mesmo propriedades dentro de propriedades, rs), la vai estar setado o ireport.encoding se não estiver como UTF-8 coloque isso no lugar do que estiver q deve funcionar.

Não deu pra saber muito pelo erro, mas como achei estranho esse UTF8 pode ser uma possibilidade.

[]'s

C

Já estava UTF-8. =\

C

Era mais ou menos o que vc disse. Coloquei o subreport no modo XML e no enconding estava UTF8, coloquei o traço e funcionou. Agora estou com problemas para gerar o relatorio. Fica aparecendo que o relatorio nao esta encontrando o Resource Bundle entretanto o caminho que estou colocando é o correto.

Meu Main é esse:

package main;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;

import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.view.JasperViewer;

import beans.Cliente;
import beans.ItemPedido;
import beans.Pedido;
import beans.Produto;

public class Principal {
	
	public static void main(String[] args) {
		String caminhoRelJasper="C:\\Users\\cleyton\\reports\\RelatorioPedidos.jasper";
		InputStream relJasper = Principal.class.getResourceAsStream(caminhoRelJasper);
		
		List<Pedido> pedidos = Principal.init();
		
		JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(pedidos);
		
		Map<String,Object> mapa = new HashMap<String, Object>();
		
		mapa.put("SUBREPORT_DIR", "C:\\Users\\cleyton\\reports\\");
		mapa.put("REPORT_RESOURCE_BUNDLE", ResourceBundle.getBundle("conf.Mensagens"));
		mapa.put("REPORT_LOCALE", Locale.getDefault());
		
		JasperPrint impressao = null;
		
		try {
			impressao = JasperFillManager.fillReport(caminhoRelJasper, mapa,ds);
			JasperViewer viewer = new JasperViewer(impressao,true);
			viewer.setVisible(true);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
}

E o erro que aparece é esse:

16/12/2010 15:02:01 net.sf.jasperreports.engine.fill.JRFillSubreport prepare
GRAVE: Fill 18820833: exception
java.util.MissingResourceException: Can't find bundle for base name Mensagens, locale pt_BR
	at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
	at java.util.ResourceBundle.getBundleImpl(Unknown Source)
	at java.util.ResourceBundle.getBundle(Unknown Source)
	at net.sf.jasperreports.engine.util.JRResourcesUtil.loadResourceBundle(JRResourcesUtil.java:568)
	at net.sf.jasperreports.engine.util.JRResourcesUtil.loadResourceBundle(JRResourcesUtil.java:506)
	at net.sf.jasperreports.engine.fill.JRFillDataset.loadResourceBundle(JRFillDataset.java:529)
	at net.sf.jasperreports.engine.fill.JRFillDataset.setParameterValues(JRFillDataset.java:564)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1231)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:862)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:830)
	at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:561)
	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(Unknown Source)
java.util.MissingResourceException: Can't find bundle for base name Mensagens, locale pt_BR
	at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
	at java.util.ResourceBundle.getBundleImpl(Unknown Source)
	at java.util.ResourceBundle.getBundle(Unknown Source)
	at net.sf.jasperreports.engine.util.JRResourcesUtil.loadResourceBundle(JRResourcesUtil.java:568)
	at net.sf.jasperreports.engine.util.JRResourcesUtil.loadResourceBundle(JRResourcesUtil.java:506)
	at net.sf.jasperreports.engine.fill.JRFillDataset.loadResourceBundle(JRFillDataset.java:529)
	at net.sf.jasperreports.engine.fill.JRFillDataset.setParameterValues(JRFillDataset.java:564)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1231)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:862)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:830)
	at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:561)
	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(Unknown Source)

O Mensagens esta dentro do pacote conf e para testar eu coloquei dois arquivos :

Mensagens_en_US.properties e Mensagens_pt_BR.properties

Será que dá para descobrir o erro.

C

Resolvi o problema e que no propriedades do relatorio no ireport a opção resource bundle estava com Mensagens, quando o certo seria conf.Mensagens

J

Eu estava com o mesmo problema com subrelatórios, e fiz como o warley e funcionou perfeitamente aqui também! Agradeço por compartilhar! :smiley:

B

Pessoal,

Não sei se vocês ainda lembram desse post, mas estou precisando de uma ajuda. Eu tenho como acessar um método da minha classe no subrelatório? Por exemplo eu tenho um atributo CNPJ que está sem formatação, mas eu tenho um método que faz a formatação para exibição do mesmo com os pontos e barras do cnpj.

Como eu faço nesse caso?

J

Olá bfilardi,

Ao selecionar um field no Ireport, você pode ir na aba propriedades e aplicar um padrão para esse campo. Procure pela propriedade “pattern” com o field selecionado. Eu sempre faço isso para alguns fields do tipo Date, ou aqueles em que preciso mostrar no formato de moeda.

Espero ter ajudado.

G

warley:

Pessola consegui!!! :lol:

Segue a solução:

A minha classe BeneficiarioTO possui os seguintes atribusto:

private String matricula;

private String nome;

List<ExtratoTO> listaExtratos;

No IReport eu mapiei os dois primeiro com String e o atributo listaExtratos como java.util.List.

Agora o pulo do gato: Inseri o subreport e coloquei as seguintes propriedades:

connection type: use datasource
data souce expression: new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listaExtratos})

No subrepostes eu coloquei os atritutos contidos no meu objeto ExtratoTO com os mesmo data types.

E funcionou! :lol:

Obrigado e um abraço para todos.

Oi,

Será que você pode passar uma projeto desses (classes Java + .jrxml) bem básico? Tipo um main apenas com objetos, uma lista e essa solução aí, porque preciso fazer um relatorio de uma classe que tem uma lista dentro dela e nao consigo de forma alguma, mesmo vendo varios tutoriais. VocÊ poderia me ajudar nisso?

Criado 14 de janeiro de 2010
Ultima resposta 1 de jun. de 2014
Respostas 31
Participantes 10