Один объект (Java bean) в качестве источника данных в iReport (JasperReports)

Я новичок в iReport, и мне нужно создать отчет PDF.

с источником данных JavaBean вы обертываете массив (или коллекцию) JavaBeans, но мне нужно только передать объект (только один экземпляр JavaBean). Я имею в виду, я должен показать в своем отчете свойства Java bean.

Как я могу это сделать? Я немного запутался, мне нужно передать массив только с одним элементом?

3 ответов


вы можете передать свой боб в отчет, используя JRBeanArrayDataSource или JRBeanCollectionDataSource или вы можете использовать карту параметров.

JasperPrint reportPrint = JasperFillManager.fillReport(
        this.getClass().getClassLoader().getResourceAsStream("/report.jasper"),
            new HashMap<String,Object>(), 
                 new JRBeanArrayDataSource(new YourBean[]{yourBean}));

или

Map<String,Object> params = new HashMap<String,Object>();
params.put("yourBean", yourBean);

JasperPrint reportPrint = JasperFillManager.fillReport(
        this.getClass().getClassLoader().getResourceAsStream("/report.jasper"),
                params, new JREmptyDataSource());

если вы хотите использовать предопределенные классы отчетов Jasper, то да. Реализации по умолчанию JRAbstractBeanDataSource ограничены работой с массивами или коллекциями. Таким образом, вы можете просто создать массив одного элемента или одну коллекцию элементов.

альтернативой было бы реализовать свою собственную версию JRAbstractBeanDataSource это заглушает next() и moveFirst() методы, но это кажется глупым количеством работы, когда есть прямой способ получить требуемое поведение.


даже если у вас есть только один компонент, вы все равно можете использовать источник данных коллекции. В этом случае коллекция будет иметь только 1 объект. Если вы создадите дизайн отчета с правильной группировкой, этот отчет впоследствии можно будет использовать для отображения нескольких классов с соответствующими свойствами.