iReport工具的使用(三)
Java后台代码的实现
申明:直接拷贝代码会有错误,这里只是为了说明流程。
前面一节中已经创建了DataBean,这一节主要来完成报表的填充。
1、 需要把所有报表中展现的数据封装成一个DataBean对象的List
import java.util.List;
import direction.shoufei.report.groupyearfee.data.CenterYearFee;
public class CenterYearFeeModel {
public List<CenterYearFee> getCenterYearFeeList(String year) {
//这里通过连接数据库或者其它方式将报表中展现的数据封装为一个List
return List对象;
}
}
import java.util.ArrayList;
import java.util.List;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
import direction.shoufei.report.groupyearfee.data.CenterYearFee;
import direction.shoufei.report.groupyearfee.model.CenterYearFeeModel;
public class CenterYearFeeDataSource implements JRDataSource {
private List<CenterYearFee> data = new ArrayList<CenterYearFee>();
public CenterYearFeeDataSource(String year) {
data = new CenterYearFeeModel().getCenterYearFeeList(year);
}
private int index = -1;
@Override
public Object getFieldValue(JRField field) throws JRException {
Object value = null;
String fieldName = field.getName();
if ("centerId".equals(fieldName)) {
value = data.get(index).getCenterId();
} else if ("centerName".equals(fieldName)) {
value = data.get(index).getCenterName();
} else if ("summary".equals(fieldName)) {
value = data.get(index).getSummary();
} else if ("preYearRate".equals(fieldName)) {
value = data.get(index).getPreYearRate();
} else if ("month1Fee".equals(fieldName)) {
value = data.get(index).getMonth1Fee();
} else if ("month2Fee".equals(fieldName)) {
value = data.get(index).getMonth2Fee();
} else if ("month3Fee".equals(fieldName)) {
value = data.get(index).getMonth3Fee();
}
...
return value;
}
@Override
public boolean next() throws JRException {
index++;
return (index < data.size());
}
}
3、 填充报表
a-接口
public interface CenterYearFeeService {
/**
* 填充报表
* @param year 某年的报表
*/
void fillCenterYearFeeToReport(String year);
}
b-填充报表的实现
import java.io.File;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.j2ee.servlets.BaseHttpServlet;
import direction.framework.utils.WebRootPath;
import direction.shoufei.report.groupyearfee.datasource.CenterYearFeeDataSource;
import direction.shoufei.report.groupyearfee.service.CenterYearFeeService;
import direction.shoufei.report.util.DateFormatUtil;
import flex.messaging.FlexContext;
public class CenterYearFeeServiceImpl implements CenterYearFeeService{
@Override
public void fillCenterYearFeeToReport(String year) {
//用iReport设计好的报表编译之后的路径
String reportFileName = new WebRootPath().getWebRootPath()
+ "/reports/shoufei/groupyearfee/GroupYearFee.jasper";
File reportFile = new File(reportFileName);
if (!reportFile.exists())
throw new JRRuntimeException(
"File GroupYearFee.jasper not found. The report design must be compiled first.");
//填充报表时向报表传递的参数
Map parameters = new HashMap();
parameters.put("QueryYear", year);
String endTimeStr = year+"-12-26";
Date endTime = DateFormatUtil.getDateByStr(endTimeStr);
if(new Date().getTime()>endTime.getTime()){
endTimeStr = DateFormatUtil.getStrByDate(endTime);
}else{
endTimeStr = DateFormatUtil.getStrByDate(new Date());
}
parameters.put("QueryEndTime", endTimeStr);
parameters.put("PreYear", DateFormatUtil.getPreYear(year));
try {
//这里将生成的数据源和参数填充到报表里
JasperPrint jasperPrint = JasperFillManager.fillReport(
reportFileName, parameters,
new CenterYearFeeDataSource(year));
FlexContext.getHttpRequest().getSession().setAttribute(
BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,
jasperPrint);
} catch (JRException e) {
e.printStackTrace();
}
}
}
这样就完成了报表的填充,报表的展现将在下一节说明。
转载于:https://www.cnblogs.com/wangtory/archive/2011/03/21/iReport3.html
iReport工具的使用(三)相关推荐
- 实用工具篇(三):Free Mybatis plugin
实用工具篇(三):Free Mybatis plugin 实用工具篇(一):Postman 实用工具篇(二):SourceTree Free Mybatis plugin 老规矩先吹一波......这 ...
- 工具教程第三十一讲:电报的使用(二)
这里是王团长区块链学院,与最优秀的区块链人一起成长!今天给大家讲讲电报Telegram的使用. 点击观看视频教程:工具教程第三十一讲:电报的使用(二) 第三步.注册使用Telegram 1.点 ...
- Java并发工具类(三)Exchanger
Java并发工具类(三)Exchanger 在J.U.C并发包中提供了一些工具类,可以供我们在日常的开发中,根据不同的情况去进行一些相关的并发控制,具体的类有: CountDownLatch Sema ...
- python自动化工具之pywinauto(三)
python自动化工具之pywinauto(三) python自动化工具之pywinauto三 问题分析 解决方案 选择源文件 配置参数 输出路径选择 等待窗口出现 问题分析 上篇尝试使用脚本进行模拟 ...
- 【ireport工具制作报表使用流程】
[ireport工具制作报表使用流程] 1.ireport使用说明 2.安装包及相关环境下载 3.快速入门上手 如何使用代码生成报表 1.ireport使用说明 ireport 是一款方便实用的报表编 ...
- 自动化运维工具——Ansible(三)——分组管理
自动化运维工具--Ansible(三)--分组管理 1. 通过ip地址分组 1.1 写法一 1.2 写法二 2. 通过主机名分组 2.1 写法一 2.2 写法二 3. 子组 1. 通过ip地址分组 1 ...
- 浅谈敏捷开发及Scrum工具leangoo(三)
之前两篇有说到敏捷开发及Scrum的一些概念及实施,现在再来记录下我们在敏捷开发实施中使用的一些工具,主要说下leangoo 工具不是敏捷开发及Scrum的必须品,但有了工具,可以让敏捷开发更好的实施 ...
- 「小程序JAVA实战」微信开发者工具helloworld(三)
转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-03/ 第一个小程序demo的运行,首选需要去使用开发工具 开发工具下载安装 https://mp. ...
- 最强通用编译器优化工具!MIT三篇顶会论文打造,准确率是传统方法5倍
乾明 十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 新代码在自家芯片上运行状况如何?英特尔自己都没有别人家的新工具清楚. 这就是MIT耗时一年提出的研究成果,名为Ithemal,核心功能 ...
最新文章
- php简单算法之冒泡排序
- 连接池--在密码修改的影响
- jquery如何判断div是否隐藏
- Android WebView 支持H5的定位Js
- 虚拟机找不到共享文件夹
- 服务器维护,日志分析常用命令
- php被替代,php 替代被弃用函数的
- Android之如何看混淆后的错误日志代码
- Linux 用户组权限讲解
- javascript参数arguments对象
- Python中seek()函数的使用方法--一文读懂
- centos安装oracle报错,CentOS安装oracle和rsh服务报错处理
- 发酵罐设计软件测试,发酵罐设计的心得体会
- python教材答案程序设计导论论文_计算机基础及Python程序设计导论(高等学校通识教育系列教材)...
- 苹果手机咋截屏_iOS14设置轻点背面截屏教程 苹果手机截图更方便了
- 立体匹配算法-SAD
- 【无标题】使用Ping命令制作的批量Ping工具,可对指定Ip进行ping测试,并将结果记录到txt文件
- 轻量级Kubernetes之k3s:16:源码编译k3s
- 驰骋lims系统菜单
- IHE基础技术框架集成规范