2012-01-27 113 views
6

我是iReport中的新成员,我必须创建PDF报告。作为iReport(JasperReports)上的数据源的一个对象(java bean)

用一个JavaBean DataSource包装一个JavaBean的数组(或集合),但我只需要传递一个对象(只有一个JavaBean的实例)。我的意思是,我必须在我的报告中显示java bean的属性。

我该怎么做?我有点困惑,我只能通过一个数组只有一个项目?

+0

您可以在这里找到示例[http://jasperreports.sourceforge.net/sample.reference/datasource/index.html#javabeandatasources) – 2012-01-27 20:20:22

回答

14

您可以使用JRBeanArrayDataSourceJRBeanCollectionDataSource你的bean传递报告,或者您可以使用参数映射。

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

它的工作原理。谢谢。 – ilazgo 2012-02-09 10:19:04

+0

我该如何访问bean的特定属性?你的bean将是我理解的一个参数。但让我们说它有documentTypes int [],我想在报告中显示。我不打包通过现场/参数报告? – 2013-06-19 10:25:09

+0

@manocha_ak您可以在报告中调用'$ P {yourBean} .getDocumentTypes()'或'$ P {yourBean} .getDocumentTypes()[0]'。 'yourBean'参数需要在'iReport'中作为参数类'YourBean'。 – dcernahoschi 2013-06-19 11:23:59

1

如果你想使用预定义的Jasper Reports类,那么是的。 JRAbstractBeanDataSource的默认实现仅限于处理数组或集合。所以你可以创建一个元素数组或一个元素集合。

另一种方法是,以实现自己的JRAbstractBeanDataSource该存根出next()moveFirst()方法的版本,但这似乎是工作的无聊的量做时,有一个直接的方式获得所需的行为。

0

即使你只有一个bean时,你仍然可以使用收集的数据源。在这种情况下,集合将只有1个对象。如果您使用正确的分组创建报表设计,则此报表可以稍后用于显示具有各自属性的多个类。

相关问题