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

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!!

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

Grande abraço!

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

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

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

Já estava UTF-8. =\

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.

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

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:

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?

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.

[quote=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.[/quote]

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?