¿Cómo se muestran los datos de JRBeanCollectionDataSource con la ayuda del componente Table?

Necesito mostrar los datos de JRBeanCollectionDataSource en el componente Table (JasperReports).

Aquí está mi plantilla, archivo ShowPerson.jrxml:

                                                                                            

Mi POJO:

 public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 

Clase principal para construir el informe:

 public class OpenReport { public static void main(String[] args) throws JRException { Map peopleMap = new HashMap(); peopleMap.put("Sisco", 17); peopleMap.put("Eve", 19); peopleMap.put("John", 20); peopleMap.put("George", 21); peopleMap.put("Steve", 18); ArrayList dataList = new ArrayList(); for(Map.Entry personMap : peopleMap.entrySet()) { Person person = new Person(); person.setName(personMap.getKey()); person.setAge(Integer.valueOf(personMap.getValue().toString())); dataList.add(person); } JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(dataList); Map parameters = new HashMap(); parameters.put("INFO", "Hello"); JasperReport report = (JasperReport) JRLoader.loadObject("src/test/ireport/ShowPerson.jasper"); JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, beanColDataSource); JFrame frame = new JFrame("Report"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(new JRViewer(jasperPrint)); frame.pack(); frame.setVisible(true); } } 

1. Envíe su fuente de datos del servidor como un parámetro y llene el informe con uno diferente (puede estar vacío).

 JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(dataList); Map parameters = new HashMap(); parameters.put("INFO", "Hello"); parameters.put("DS1", beanColDataSource); JasperReport report = (JasperReport) JRLoader.loadObject("src/test/ireport/ShowPerson.jasper"); JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, new JREmptyDataSource()); 

2. Calificar un nuevo parámetro en el informe de tipo JRBeanCollectionDataSource

  

3. Configure TableDatasource para usar el parámetro $ P {DS1}.

       ..... 

4.Declare los campos (nombre, edad) en Table Dataset 1.

5.En la tabla, en la DetailBand agregue un TextField en cada columna con el campo correspondiente ($ F {nombre} y $ F {edad} respectivamente).

@laura: Obtengo un nuevo error al intentar establecer TableDatasource para usar el parámetro $ P {DS1}. net.sf.jasperreports.engine.JRBeanCollectionDataSource no se puede resolver a un tipo

Ahora, he encontrado la solución, quizás no la mejor.

 Map parameters = new HashMap(); parameters.put("INFO", "Hello"); parameters.put("DS1", dataList); JasperReport report = (JasperReport) JRLoader.loadObject("src/test/ireport/ShowPerson.jasper"); JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, new JREmptyDataSource()); 

Modifique la clase de $ P {DS1} a java.util.Collection o java.util.List

Y configure la fuente de datos de la tabla para

 new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{DS1})