一个对象(java bean)作为iReport上的数据源(JasperReports)

时间:2012-01-27 19:24:39

标签: java jasper-reports

我是iReport的新手,我必须创建一份PDF报告。

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

我该怎么做?我有点困惑,我必须传递一个只有一个项目的数组?

3 个答案:

答案 0 :(得分:14)

您可以使用 JRBeanArrayDataSource JRBeanCollectionDataSource 将bean传递给报告,也可以使用参数Map。

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

答案 1 :(得分:1)

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

替代方法是实现您自己的JRAbstractBeanDataSource版本,该版本会隐藏next()moveFirst()方法,但这似乎是一项愚蠢的工作量。获得所需行为的直接方式。

答案 2 :(得分:0)

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