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