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
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).
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.
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
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 ?
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
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…
=/
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.
[quote=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.
[/quote]
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.
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
[quote=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[/quote]
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
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:
[quote]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. [/quote]
So seguir isso q vai funcionar.
[]'s
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
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