Один объект (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 объект. Если вы создадите дизайн отчета с правильной группировкой, этот отчет впоследствии можно будет использовать для отображения нескольких классов с соответствующими свойствами.