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
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);   
    }
}
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
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;
    }       
}
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
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();   
    }
}
mais lors de l’exécution, il me donne cette l'erreur :
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
J'ai cherché sur le net mais j'ai pas trouvé grand chose...

Quelqu'un a une idée d'où vient l'erreur ?

Merci d'avance pour votre aide.