在JasperReport中创建/传递JavaBean数据源

在JasperReport中创建/传递JavaBean数据源,java,jasper-reports,reporting,Java,Jasper Reports,Reporting,我在JSF应用程序中使用JasperReport和ireport动态生成报告。 这就是我努力实现的目标:- 我的结构(读作HashMap/ArrayList)包含需要传递到报表的数据,以便在报表中显示相同的数据 我的报表已经包含一个数据源连接,我正在使用它从数据库中获取一些值并将其填充到报表中 我正在创建一个子报表,以便对于需要从代码传递的数据,我可以使用该子报表并将该子报表嵌入主报表中 我的问题是:- 1.我无法将集合(读取为HashMap/ArrayList)传递给subreport以使用代

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

  • 我的结构(读作HashMap/ArrayList)包含需要传递到报表的数据,以便在报表中显示相同的数据

  • 我的报表已经包含一个数据源连接,我正在使用它从数据库中获取一些值并将其填充到报表中

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

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

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

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

    有谁能指导我如何创建/传递一个JavaBean数据源到报表,以便填充数据

    请引导

    更新部分:-

    用于将参数传递到报表并生成报表的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;
        }
    
    公共类TestDataSource
    {
    公共静态void main(字符串[]args)
    {
    试一试{
    JasperDesign JasperDesign=JRXmlLoader.load(“D:\\jasperReports\\subReportDataSource.jrxml”);
    JasperReport JasperReport=(JasperReport)JasperCompileManager.compileReport(jasperDesign);
    映射参数=新的HashMap();
    parameters.put(“Title”,generateCollection());
    JasperPrint JasperPrint=JasperFillManager.fillReport(jasperReport,参数,新的JRBeanCollectionDataSource(generateCollection());
    JasperViewer.viewReport(jasperPrint);
    }捕获(例外e)
    {
    e、 printStackTrace();
    }
    }
    公共静态ArrayList generateCollection()
    {
    ArrayList arrlist=新的ArrayList();
    添加(新PersonBean(“A”,20));
    添加(新PersonBean(“B”,30));
    添加(新PersonBean(“C”,40));
    添加(新PersonBean(“D”,50));
    添加(新PersonBean(“E”,40));
    添加(新PersonBean(“F”,60));
    返回列表;
    }
    
    }

    现在我创建了一个新的报告(report)…在其中我放置了一个子报告(sub report)…将子报告数据源配置为 新的net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{Title})

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

    现在在我的子报告中,我只放置了两个静态字段,即Name和Age。
    如何告诉我的报表/子报表打印正在传递的hashmap中作为值显示的值。

    如果您已经有一个数据源,那么您可以在填充报表时通过参数映射传递列表/映射

    Map<String, Object> param = new HashMap<String, Object>();
    param.put("SUB_DATA_SOURCE", yourList);
    
    JasperFillManager.fillReport(jasperReport, param,
                    new JRBeanCollectionDataSource(yourMainListHere));
    

    请找到更新后的帖子..我如何告诉我的报表/子报表打印arraylist中存在的值..我发现绝对没有办法将hashmap与报表中的任何值关联…请指导…您必须在子报表中创建与bean中同名的字段,然后将其与TEXTFIELDS一起使用,不使用STATICTEXTFIELD(但你必须像我之前告诉过你的那样设置数据提供者)@AngelsandDemons,你有没有解决方案?如果没有,请回复我为您编写正确的解决方案。
    new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{SUB_DATA_SOURCE})