|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() ![]() Inscription : mai 2008 Messages : 60 ![]() |
Bonjour,
j'ai créé iReport un rapport contenant 3 sous-rapports. La source de données de se rapport est un bean. j'ai donc créé une classe MyBeanDataSource : public MyBeanDataSource extends JRAbstractBeanDataSource { public static Object createData() {return bean} } Les sources de données des 3 sous-rapports sont également des bean. Nous avons donc 3 classes : public MySubReportBeanDataSource1 extends JRAbstractBeanDataSource { public static List createCollection() {return list} } public MySubReportBeanDataSource2 extends JRAbstractBeanDataSource { public static List createCollection() {return list} } public MySubReportBeanDataSource3 extends JRAbstractBeanDataSource { public static List createCollection() {return list} } Lors de la création du rapport, j'ai déclaré les différents paramètres que je vais envoyer dans la Map params. Dedans on y retrouve nos 3 DataSource pour les sous-rapport. A la création des sous-rapport dans iReport, j'ai sélectionné dans la liste déroulante (cliquer sur le sous-rapport : propriété=>rapport secondaire) "Expression de connexion/source de donné" la valeur "Utiliser l'expression de source de donnée", puis je lui affecte la valeur du paramètre passé dans la Map params. public Edition { fillReport() { // Chargement du report URL urlReport = URL url = instance.getClass().getResource("report.jasper"); URL urlSubReport1 = URL url = instance.getClass().getResource("sub_report1.jasper"); URL urlSubReport2 = URL url = instance.getClass().getResource("sub_report2.jasper"); URL urlSubReport3 = URL url = instance.getClass().getResource("sub_report3.jasper"); //DataSource MyBeanDataSource ds_report = new MyBeanDataSource() ; MySubReportBeanDataSource1 ds_subReport1 = new MySubReportBeanDataSource1() ; MySubReportBeanDataSource2 ds_subReport2 = new MySubReportBeanDataSource2() ; MySubReportBeanDataSource3 ds_subReport3 = new MySubReportBeanDataSource3() ; // désérialisation du raport JasperReport jasperReport = (JasperReport)JRLoader.loadObject(urlRepport.getPath()); Map params = new HashMap() ; params.put("SUBREPORT1", urlSubReport1.getPath()) ; params.put("SUBREPORT2", urlSubReport2.getPath()) ; params.put("SUBREPORT3", urlSubReport3.getPath()) ; params.put("DS_SUBREPORT1", ds_subReport1) ; params.put("DS_SUBREPORT2", ds_subReport1) ; params.put("DS_SUBREPORT3", ds_subReport1) ; JasperPrint print = JasperFillManager.fillReport(jasperReport, params, ds_report); return JasperExportManager.exportReportToPdf(print); } } Lorsque je teste le résultat j'obtiens un NullPointerException dans la classe JRPropertiesMap à l'appel de la méthode readObject qui désérialise l'objet report : Exception in thread "main" java.lang.NullPointerException at net.sf.jasperreports.engine.JRPropertiesMap.readObject(JRPropertiesMap.java:185) private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); if (propertiesList == null)// an instance from an old version has been deserialized { //recreate the properties list and map propertiesList = new ArrayList(propertiesMap.keySet()); // LIGNE CAUSANT LE NULLPOINTEREXCEPTION !!!!!! propertiesMap = new HashMap(propertiesMap); } } J'ai l'impression qu'il y a eu un problème lors de la compilation du rapport sour iReport, et que dans le fichier jasper de sortie, la variable d'instance propertiesMap a été mal sérialisée. Mais je n'arrive pas à voir pourquoi. Si l'un d'entre vous peut me donner un coup de main, je l'en remercie d'avance car je suis à court d'idée. @+ |
|
|
00
|
|
|
#2 |
![]() ![]() |
Bonjour,
Que contient le propertiesMap.keySet()?
__________________
*** Ingénieur COBOL/AS400 *** ------------------------------------------------------------------- Mes articles, Mon Blog Rubrique Jasper/iReport :------- Forum Jasper -------- ----- FAQ Jasper/iReport ----- |
|
00
|
|
|
#3 |
|
Membre habitué
![]() ![]() Inscription : mai 2008 Messages : 60 ![]() |
Justement je ne sais pas trop j'aimerai bien pouvoir l'identifier dans iReport. Est ce la map de paramètres que l'on passe ? Est ce les propriétés que l'on configure dans iReport ? Je ne suis pas expert dans cette technologie. Je l'est toujours utilisé de manière assez simple.
Merci ! |
|
|
00
|
|
|
#4 |
![]() ![]() |
Beh faut nous expliquer tout t'as eu ce code et nous expliquer un minimum des choses!!
car je ne vois où et quand est ce que tu as initialisé l'objet dont je t'ai parlé
__________________
*** Ingénieur COBOL/AS400 *** ------------------------------------------------------------------- Mes articles, Mon Blog Rubrique Jasper/iReport :------- Forum Jasper -------- ----- FAQ Jasper/iReport ----- |
|
00
|
Copyright © 2000-2012 - www.developpez.com