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})