java - 在 JasperReport 中创建/传递 Java bean 数据源

标签 java jasper-reports reporting

我在我的 JSF 应用程序中使用 JasperReport 和 ireport 来动态生成报告。 这就是我想要实现的目标:-

  1. 我的结构(读取为 HashMap/ArrayList)包含需要传递给报告的数据,以便在报告中显示相同的数据。

  2. 我的报告已经包含一个数据源连接,我使用它从数据库中获取一些值并将其填充到报告中。

  3. 我正在创建一个子报表,以便对于需要从代码传递的数据,我可以使用该子报表并将该子报表嵌入到主报表中。

我的问题是:- 1. 我无法将集合(读取为 HashMap/ArrayList)传递给子报表以使用我的代码中的数据填充它。

我绝对确定必须有某种方法将整个集合传递给子报表以便填充它,我也尝试创建一个 JavaBean 数据源连接但是在创建连接时它说缺少类路径条目。

我无法将各个类捆绑在一个 jar 中并将 jar 放在类路径中,因为值在结构中不断变化,....

任何人都可以指导我如何创建/将 java bean 数据源传递给报告,以便可以填充数据...

请指导...

更新部分:-

将参数传递给报告并生成报告的Java代码:-

public class TestDataSource
{
    public static void main(String[] args)
    {

        try {
            JasperDesign jasperDesign = JRXmlLoader.load("D:\\jasperReports\\subReportDataSource.jrxml");
            JasperReport jasperReport =(JasperReport)JasperCompileManager.compileReport(jasperDesign);
            Map<String,Object> parameters = new HashMap<String,Object>();
            parameters.put ("Title",generateCollection());

            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JRBeanCollectionDataSource(generateCollection()));

            JasperViewer.viewReport(jasperPrint);
            }catch(Exception e)
            {
                e.printStackTrace();
            }
    }

    public static ArrayList<PersonBean> generateCollection()
    {
        ArrayList<PersonBean> arrlist=new ArrayList<PersonBean>();
        arrlist.add(new PersonBean("A", 20));
        arrlist.add(new PersonBean("B",30));
        arrlist.add(new PersonBean("C",40));
        arrlist.add(new PersonBean("D",50));
        arrlist.add(new PersonBean("E",40));
        arrlist.add(new PersonBean("F",60));

        return arrlist;
    }

现在我创建了一个新报告(Report)..在里面我放置了一个子报告(Sub-Report)..将子报告数据源配置为 新的 net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{Title})

连接类型:-使用数据源连接类型。

现在在我的子报告中,我只放置了两个静态字段作为姓名和年龄。 我如何告诉我的报告/子报告打印正在传递的 hashmap 中作为值存在的值。

最佳答案

如果您已经有一个数据源,那么您可以在填写报告时通过参数 Map 传递您的列表/ map 。

Map<String, Object> param = new HashMap<String, Object>();
param.put("SUB_DATA_SOURCE", yourList);

JasperFillManager.fillReport(jasperReport, param,
                new JRBeanCollectionDataSource(yourMainListHere));

为此,您必须在 MAIN 报告中创建一个参数,该参数的名称与您在参数映射中设置的名称相同,并为其提供一个类型类(在我的例子中为列表)。

然后您必须创建子报表元素并将连接类型设置为“使用数据源表达式”,并在“数据源表达式”中设置:

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{SUB_DATA_SOURCE})

关于java - 在 JasperReport 中创建/传递 Java bean 数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11517748/

相关文章:

java - 基于DTO对象验证来验证对象

java - 如何在 Selenium WebDriver 中使用断言?

java - 使用 ireport 设计器工具生成 jasper 报告

java - 如何用模式格式化 java.time.LocalDateTime 和 java.time.LocalDate?

java - 使用包含图表 5.5.0 的 JRViewer 报告和 jasper 报告打印

java - JAXB 编码器和输出 XML 格式

java - Spring配置文件: which sintax?中的Bean引用

excel - 具有多行的数据透视表都具有相同的层次结构

asp.net - 使用报告查看器 10.0.0.0 打印 rdlc,打印按钮未显示

html - 如何从 TDBGrid 打印或查看 HTML?