From:http://hi.baidu.com/lxiangshanyu/blog/item/171a7661a5ce53720d33fa76.html
Model类:
主表对应Model类:
public class OrderIreport {
private Long id;
private String orderSN;
private String email;
private String tel;
private String status;
private String memo;
private String creator;
private List<OrderInfoIreport> orderInfos;
//Set、Get方法省略
}
子表对应的Model类:
public class OrderInfoIreport {
private Long id;
private String orderSN;
private int num;
private Timestamp startDate;
private Timestamp endDate;
//Set、Get方法省略
}
Struts:Action方法
public String print() throws JRException, IOException{
//数据源
orders = orderManagers.getAllOrder();
if(orders != null && !(orders.isEmpty())){
for(int i = 0;i < orders.size();i++){
List<OrderInfoIreport> orderInfo = orderManagers.getOrderInfoByOrderSN(orders.get(i).getOrderSN());
orders.get(i).setOrderInfos(orderInfo);
}
}
ServletContext context = getRequest().getSession().getServletContext();
String subPath = context.getRealPath("/reports/OrderSub.jasper"); //OrderSub.jasper 子报表
String filePath = context.getRealPath("/reports/OrderPrint.jasper"); //OrderPrint.jasper 主报表
JasperReport subReport = (JasperReport)JRLoader.loadObject(subPath);
JasperReport fileReport = (JasperReport)JRLoader.loadObject(filePath);
Map subMap = new HashMap();
subMap.put("SUBREPORT_DIR", subReport); //子报表路径
JRBeanCollectionDataSource dataSource =new JRBeanCollectionDataSource(orders);
JasperPrint jasperPrint = JasperFillManager.fillReport(fileReport, subMap, dataSource);
HttpServletResponse response = ServletActionContext.getResponse();
OutputStream os = response.getOutputStream();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "filename=orderPrint.pdf");
response.setCharacterEncoding("UTF-8");
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, os);
exporter.exportReport();
return null;
}
在做struts2整合ireport复合报表时最重要的是子报表的路径和子报表的数据源。
1)子报表的路径是由SUBREPORT_DIR变量指明的,程序中已标明,主报表是根据SUBREPORT_DIR变量找到子报表的;
2)子报表的数据源:子报表的数据源也是由主报表提供的,在主报表中增加 orderInfos(主表对应的Model类中的属性) 字段,然后在主报表中双击子报表,选择子报表标签,连接/数据源表达式 选择使用数据源表达式,表达式为new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{orderInfos});在 子报表(其他) 标签中,子报表表达式类选择 net.sf.jasperreports.engine,JasperReport ,子报表表达式为 $P{SUBREPORT_DIR}
创建子报表时就跟创建一张普通的报表一样,没有特殊的设置
最后,在Action中的return返回时返回NULL即可
分享到:
相关推荐
Struts2+iReport3.7.2报表基本应用是一个典型的Java Web开发中的报表生成场景,主要涉及两大核心技术:Struts2作为MVC框架处理前端请求和业务逻辑,iReport作为一个强大的报表设计工具,用于创建复杂的报表模板。...
使用ireport和struts2进行报表设计的简单示例,生成普通报表和饼图、柱状图。java工程的lib里包含丰富的jar包,且很多都是从各个网站下载的最新版本,文件夹内还包含一些ireport和jasperreport文档,适合刚入门学习...
在Struts2中集成iReport,可以实现从数据库或其他数据源获取数据,然后以PDF格式展示给用户,这对于企业级应用来说非常重要,因为PDF报表通常用于打印、保存和分发,确保数据的一致性和完整性。 **Struts2的配置** ...
Struts2、JasperReport 和 iReport 是开发Web报表应用中的常用技术栈。本文主要针对使用Struts2框架结合JasperReport5.0与iReport5.0进行报表开发时可能遇到的问题进行总结。 1. **报表预览问题**: - 数据源为空...
2. 创建子报表:然后,我们需要创建一个子报表,作为父报表中的一个组件。子报表是一个独立的报表,需要单独设计和实现。 3. 父报表关联子报表:在父报表中,我们需要关联子报表,通过 SubReportExpression 来实现。...
Struts2、 Jasper 和 iReport 是Java开发领域中用于创建动态和复杂的报表的重要工具。Struts2是一个基于MVC(模型-视图-控制器)架构的Web应用框架,它为开发者提供了一种组织和控制应用程序逻辑的方式。...
Struts2、iReport与JasperReport是Java开发中用于构建高效、动态Web应用程序和报表生成的工具。在这个项目中,这些技术结合在一起,提供了一种强大的报表导出解决方案。以下是对这些关键技术及其在项目中的应用的...
标题"Ireport4集成Struts2"涉及的是Java开发中两个重要的技术组件——iReport和Struts2的整合。iReport是JasperReports库的一个可视化设计工具,用于创建复杂的报表,而Struts2则是一个流行的MVC(模型-视图-控制器...
在这个场景下,`Maven`、`Struts2`、`JasperReport` 和 `iReport` 是四个关键的技术组件,它们共同作用于创建一个强大的、数据驱动的Web应用程序。下面将详细介绍这些技术及其整合过程。 首先,`Maven` 是一个项目...
在Struts2中整合jasperReports,可以实现Web应用中的动态报表生成和展示功能。首先,我们需要确保系统环境中已经安装了jasperReports库以及其依赖的iReport设计工具。iReport是用于设计jasperReports报表的图形化...
在本学习小结中,我们将探讨如何将Struts2与IReport整合,以实现在Web应用中动态生成和展示报表的功能。 首先,让我们了解Struts2的基础知识。Struts2的核心是Action类,它是处理用户请求并返回结果的核心组件。...
iReport 报表、子报表、主从报表、合计、实例解析1. 开发使用步骤(iReport4.1)... 2 4.1. JasperReport 和iReport的介绍... 2 4.1.1. JasperReport 简介... 3 4.1.2. iReport 简介... 3 4.1.2.1. iReport几个重要...
3. **Struts整合**:在Struts中,我们需要创建一个Action类来处理报表相关的请求。Action类会调用服务层方法,执行数据查询并生成报表。通常,报表的生成会涉及到JasperReport库,使用`JasperFillManager.fillReport...
IReport是一款强大的报表设计工具,它允许开发者通过拖拽方式创建复杂的报表,而Struts2则是一个流行的Java Web框架,用于处理用户请求并管理应用程序流程。下面将详细阐述这两个技术及其结合使用的要点。 1. ...
在本文中,我们将深入探讨如何整合Struts2框架与JasperReport3来创建动态报表,并利用iReport工具进行报表设计。Struts2是一个流行的Java Web应用程序框架,它提供了MVC(模型-视图-控制器)架构,而JasperReport则...
【MyEclipse、Eclipse、iReport、JasperReport与Struts2的整合】 在Java Web开发中,MyEclipse和Eclipse是两种常用的集成开发环境(IDE),它们提供了丰富的功能,包括代码编辑、调试、构建和部署等。iReport是一款...
2. **性能考虑**:对于大数据量的报表,直接在iReport中进行复杂的数据处理可能会导致性能下降。此时建议优先采用SQL查询的方式来进行数据预处理。 3. **兼容性问题**:不同版本的iReport可能存在兼容性差异,因此在...
IReport和JasperReport是两个非常流行的Java报表工具,它们能够帮助开发者创建复杂、美观且功能丰富的报表。本篇将深入探讨如何利用IReport来实现子报表以及行合并的实例。 首先,IReport是一款基于GUI的报表设计...
Struts2与ireport的整合主要体现在通过Action类处理请求,然后调用ireport生成报表,最后将报表内容返回给前端展示。为了实现这一过程,我们需要在Struts2配置文件中定义相关的Action,指定ireport生成报表的方法,...
在本部分中,我们可以识别出关于iReport工具导出报表为PDF格式的一系列操作细节和知识点。iReport是一个报表设计工具,可以用来创建复杂的报表,并且可以将报表导出为多种格式,包括PDF和HTML。下面,我们将详细讲解...