我在 JSF 应用程序中使用 JasperReport 和 ireport 来动态生成报告。
这就是我想要实现的目标:-
我的结构(读为 HashMap/ArrayList)包含需要传递到报告的数据,以便在报告中显示相同的数据。
我的报告已经包含一个数据源连接,我使用该连接从数据库中获取一些值并将其填充到报告中。
我正在创建一个子报表,以便对于需要从代码传递的数据,我可以使用该子报表并将该子报表嵌入到主报表中。
我的问题是:-
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;
}
}
现在我创建了一个新报告(报告)..在其中放置了一个子报告(子报告)..将子报告数据源配置为
新 net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{标题})
连接类型:-使用数据源连接类型。
现在,在我的子报告中,我刚刚放置了两个静态字段:“姓名”和“年龄”。
我如何告诉我的报告/子报告打印作为正在传递的哈希图中的值存在的值。