Come mostrare i dati JRBeanCollectionDataSource con l’aiuto del componente Table?

Devo mostrare i dati JRBeanCollectionDataSource nel componente Table (JasperReports).

Ecco il mio modello, il file ShowPerson.jrxml:

                                                                                            

Il mio 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; } } 

Classe principale per il rapporto di costruzione:

 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. Inviare la propria origine dati dal server come parametro e riempire il report con uno diverso (può essere vuoto).

 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.Decalre un nuovo parametro nel report di tipo JRBeanCollectionDataSource

  

3.Impostare TableDatasource per utilizzare il parametro $ P {DS1}.

       ..... 

4. Dichiarare i campi (nome, età) in Dataset tabella 1.

5.Nella tabella, nel DetailBand, aggiungi un campo di testo in ogni colonna con il campo corrispondente ($ F {nome} e $ F {età} rispettivamente).

@laura: ottengo un nuovo errore quando provo a impostare TableDatasource per utilizzare il parametro $ P {DS1}. net.sf.jasperreports.engine.JRBeanCollectionDataSource non può essere risolto in un tipo

Ora, ho trovato la soluzione, forse non la migliore.

 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()); 

Modificare la class di $ P {DS1} in java.util.Collection o java.util.List

E impostare l’origine dati della tabella su

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