Bonjour,
Je suis débutant dans la génération des rapports avec JasperReport, pour cela j'ai suivi un tutoriel (http://www.javatutoriales.com/2009/0...pots-y_18.html) (2ème partie JAVA -2 - Subreportes con datasources propios-) pour faire un exemple avec "Subreporte"
Comme il est indiqué sur le tutoriel, j'ai créé mon rapport principal et mon sous-rapport et mes classes Java :
Alumno.java
Materia.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 package pack1; import java.util.ArrayList; import java.util.List; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; public class Alumno { private int id; private String clave; private String nombre; private List materias = new ArrayList(); public Alumno() { } public Alumno(int id, String clave, String nombre) { this.id = id; this.clave = clave; this.nombre = nombre; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getClave() { return clave; } public void setClave(String clave) { this.clave = clave; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public List getMaterias() { return materias; } public void setMaterias(List materias) { this.materias = materias; } public void addMateria(Materia materia) { this.materias.add(materia); } public JRDataSource getMateriasDS() { return new JRBeanCollectionDataSource(materias); } }et ma classe Main.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 package pack1; public class Materia { private int id; private String nombre; public Materia() { } public Materia(int id, String nombre) { this.id = id; this.nombre = nombre; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } }mais lors de l’exécution, il me donne cette l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 package pack1; import java.io.File; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import net.sf.jasperreports.engine.JRExporter; import net.sf.jasperreports.engine.JRExporterParameter; import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import net.sf.jasperreports.engine.design.JasperDesign; import net.sf.jasperreports.engine.export.JRPdfExporter; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.engine.xml.JRXmlLoader; public class Main { /** * @param args */ public static void main(String[] args) throws Exception { String url = null; List listaAlumnos = new ArrayList(); for (int i = 1; i <= 5; i++) { Alumno alumno = new Alumno(i, "0000" + i, "Alumno " + i); listaAlumnos.add(alumno); for (int j = 1; j <= 3; j++) { alumno.addMateria(new Materia(j, "Materia " + j)); } } url = "D:/reportJRXML/reporteMaestroDS.jrxml"; JasperDesign reporte = JRXmlLoader.load(url); JasperReport jasperReport = JasperCompileManager.compileReport(reporte); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, new JRBeanCollectionDataSource(listaAlumnos)); JRExporter exporter = new JRPdfExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new File("D:/reporte2PDF/reporteMaestroDS.pdf")); exporter.exportReport(); } }
J'ai cherché sur le net mais j'ai pas trouvé grand chose...Exception in thread "main" net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : materiasDs
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:123)
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:96)
at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:100)
at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:1317)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1218)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1194)
at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1544)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:142)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:909)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:841)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:88)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:969)
at pack1.Main.main(Main.java:52)
Caused by: java.lang.NoSuchMethodException: Unknown property 'materiasDs' on class 'class pack1.Alumno'
at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1313)
at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:762)
at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837)
at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426)
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111)
... 13 more
Quelqu'un a une idée d'où vient l'erreur ?
Merci d'avance pour votre aide.
Partager