iReport+jasperreport创建子表的几种方式(2)
昨天给大家讲了一种方式,今天换一种方式,就是说,将主报表的某一参数直接传递给子报表作为数据源,当然,这个参数是包含子报表的,这个主要是基于Web开发,也是从网友那边拿来的,结合自己的经验再做一遍。 首先创建我们需要的JavaBean ProvinceBean.java
昨天给大家讲了一种方式,今天换一种方式,就是说,将主报表的某一参数直接传递给子报表作为数据源,当然,这个参数是包含子报表的,这个主要是基于Web开发,也是从网友那边拿来的,结合自己的经验再做一遍。
首先创建我们需要的JavaBean
ProvinceBean.java
package test; import java.util.ArrayList; public class ProvinceBean { private String provinceName; private ArrayList<CityBean> cities; public String getProvinceName() { return provinceName; } public void setProvinceName(String provinceName) { this.provinceName = provinceName; } public ArrayList<CityBean> getCities() { return cities; } public void setCities(ArrayList<CityBean> cities) { this.cities = cities; } }
package test; public class CityBean { private String cityName; public String getCityName() { return cityName; } public void setCityName(String cityName) { this.cityName = cityName; } }
下面创建Servlet类这个类我“本地化”一下,改动了一点
package test;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.net.ssl.internal.ssl.Debug;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;
public class ChildReportServlet extends HttpServlet
{
private static final long serialVersionUID = -1233414483047719876L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
try
{
String root_path = this.getServletContext().getRealPath("/");
root_path = root_path.replace('\\', '/');
String reportFilePath = root_path + "ireport/parent_sub.jasper";
//Debug.println(reportFilePath, root_path);
JRDataSource dataSource = this.createDataSource();
Map
parameters.put("SUBREPORT_DIR", root_path + "ireport/");
JasperReport report = (JasperReport)JRLoader.loadObject(reportFilePath);
JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, dataSource);
OutputStream ouputStream = resp.getOutputStream();
resp.setContentType("application/pdf");
resp.setCharacterEncoding("UTF-8");
resp.setHeader("Content-Disposition", "attachment; filename=\"" +URLEncoder.encode("PDF报表", "UTF-8")+ ".pdf\"");
// 使用JRPdfExproter导出器导出pdf
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
exporter.exportReport();
ouputStream.close();
}catch(Exception ex)
{
ex.printStackTrace();
}
}
private JRDataSource createDataSource()
{
//生成测试数据
ArrayList
ProvinceBean province = new ProvinceBean();
province.setProvinceName("山东");
ArrayList
CityBean city = new CityBean();
city.setCityName("济南");
cities.add(city);
city = new CityBean();
city.setCityName("青岛");
cities.add(city);
city = new CityBean();
city.setCityName("潍坊");
cities.add(city);
province.setCities(cities);
provinces.add(province);
province = new ProvinceBean();
province.setProvinceName("江苏");
cities = new ArrayList
city = new CityBean();
city.setCityName("南京");
cities.add(city);
city = new CityBean();
city.setCityName("无锡");
cities.add(city);
city = new CityBean();
city.setCityName("苏州");
cities.add(city);
province.setCities(cities);
provinces.add(province);
return new JRBeanCollectionDataSource(provinces);
}
}
我的文件列表
注意一下,要把jasperreport的jar文件拷贝到lib文件夹下,不然出错找度娘或者问我好了
下面用iReport制作我们需要的报表模板
这两个
打开iReport新建一个报表,数据源的话可以选择空数据源
在主表左侧属性Fields中新建字段;从上面我们创建的Bean中可以知道有两个字段需要建立一个是provinceName一个是cities
创建时候要注意cities的数据类型是list
之后创建子表,这个一路next下去就OK了,将其放到任意一个bands中,如果没有特殊的偏好设置,在主表中点击子表它的属性应该会在右边栏显示,上上次的文章我已经说过要注意Connection type属性,一个是不用,一个是和父表相同,还有一个use datasource。。。。这是这次我们要使用的,选择它然后在下面Data Source Exception 中填入
new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{cities})
如下图:$F{cities}就是我们要传递给字表的数据,只注重技术,不考虑美观,做的就随意了些
下面切换到子表的设计界面,把那些没有用到的bands删掉或者高度设为0
不知道你还记不记得上面我们创建的CityBean,它包含一个属性参数,而我们传给子表的是一个City列表,那么在子表中我们要把它提取出来
所以,在子表的fields中新建字段cityName这个字段属性要和CityBean里面的完全一样,不然就会出错的。
之后点击preview,当然是在主表中点击,会跳出些让输入什么的,不用管它,我们只要是想让iReport编译我们的文件形成后缀名为.jasper,也借此检查一下是否有错。
编译之后把主表和子表拷贝到之前说的那位置,运行服务器
打开:
需要源码请留邮箱,欢迎来探讨

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

常量和变量用于在编程中存储数据值。变量通常指的是可以随时间变化的值。而常量是一种变量类型,其值在程序执行期间不能被改变。在Python中只有六个内置常量可用,它们是False、True、None、NotImplemented、Ellipsis(...)和__debug__。除了这些常量之外,Python没有任何内置数据类型来存储常量值。示例下面演示了常量的示例-False=100输出SyntaxError:cannotassigntoFalseFalse是Python中的内置常量,用于存储布尔值

如何在iPhone上个性化电话Apple的iOS17引入了一项名为“联系人海报”的新功能,可让您在iPhone上个性化呼叫屏幕的外观。此功能允许您使用所选的照片、颜色、字体和拟我表情作为联系人卡片设计海报。因此,当您进行通话时,您的自定义图像将完全按照您的设想显示在收件人的iPhone上。您可以选择与所有保存的联系人共享您唯一的联系人海报,也可以选择可以看到它的人。同样,在通话交流期间,您还将看到其他人的联系人海报。此外,Apple允许您为单个联系人设置特定的联系人照片,使来自这些联系人的呼叫与

本文将引起您的兴趣,如果您有意在Windows上使用GIMP进行像素艺术创作。GIMP是一款著名的图形编辑软件,不仅免费开源,还能帮助用户轻松创建出美丽的图像和设计。除了适用于初学者和专业设计师外,GIMP也可以用于制作像素艺术,这种数字艺术形式是利用像素作为唯一构建块来进行绘制和创作的。如何在GIMP中创建像素艺术以下是在WindowsPC上使用GIMP创建像素图片的主要步骤:下载并安装GIMP,然后启动应用程序。创建一个新的形象。调整宽度和高度的大小。选择铅笔工具。将笔刷类型设置为像素。设置

标题:真我手机新手指南:如何在真我手机上创建文件夹?在当今社会,手机已经成为人们生活中必不可少的工具。而真我手机作为一款备受欢迎的智能手机品牌,其简洁、实用的操作系统备受用户喜爱。在使用真我手机的过程中,很多人可能会遇到需要整理手机中的文件和应用的情况,而创建文件夹就是一种有效的方式。本文将介绍如何在真我手机上创建文件夹,帮助用户更好地管理自己的手机内容。第

很多朋友表示想知道在格力+软件里该怎么去创建家庭,下面为大家带来了操作方法,想要了解的朋友和我一起来看看吧。首先,打开手机上的格力+软件,并登录。接着,在页面底部的选项栏中,点击最右边的“我的”选项,即可进入个人账户页面。2.来到我的页面后,在“家庭”下方的选项里有一个“创建家庭”,找到后在它的上面点击进入。3.接下来跳转到创建家庭的页面里,根据提示在输入框里输入要设置的家庭名称,输入好后在右上角点击“保存”按钮。4.最后在页面下方会弹出一个“保存成功”的提示,代表家庭已经成功创建好了。

在本文中,我们将学习如何使用python创建用户界面。什么是图形用户界面?术语“图形用户界面”(或“GUI”)是指一组可以在计算机软件中交互以显示信息和交互的视觉元素项目。为了响应人类输入,对象可能会改变颜色、大小和可见度等外观特征。图标、光标和按钮等图形组件可以通过音频或视觉效果(如透明度)进行增强,以创建图形用户界面(GUI)。如果您希望更多人使用您的平台,您需要确保它具有良好的用户界面。这是因为这些因素的结合会极大地影响您的应用或网站提供的服务质量。Python被开发人员广泛使用,因为它提

如何使用Highcharts创建甘特图表,需要具体代码示例引言:甘特图是一种常用于展示项目进度和时间管理的图表形式,能够直观地展示任务的开始时间、结束时间和进度。Highcharts是一款功能强大的JavaScript图表库,提供了丰富的图表类型和灵活的配置选项。本文将介绍如何使用Highcharts创建甘特图表,并给出具体的代码示例。一、Highchart

在iOS17中,Apple为其常用的“电话”和“通讯录”应用程序新增了联系人海报功能。这一功能允许用户为每个联系人设置个性化的海报,使通讯录更具可视化和个性化。联系人海报可以帮助用户更快速地识别和定位特定联系人,提高了用户体验。通过这一功能,用户可以根据自己的喜好和需求,为每个联系人添加特定的图片或标识,使通讯录界面更加生动iOS17中的Apple为iPhone用户提供了一种新颖的方式来表达自己,并添加了可个性化的联系海报。联系人海报功能允许您在呼叫其他iPhone用户时展示独特的个性化内容。您
