Java后台代码的实现

申明:直接拷贝代码会有错误,这里只是为了说明流程。

前面一节中已经创建了DataBean,这一节主要来完成报表的填充。

1、 需要把所有报表中展现的数据封装成一个DataBean对象的List

package direction.shoufei.report.groupyearfee.model;

import java.util.List;
import direction.shoufei.report.groupyearfee.data.CenterYearFee;

public class CenterYearFeeModel {
    public List<CenterYearFee> getCenterYearFeeList(String year) {
        //这里通过连接数据库或者其它方式将报表中展现的数据封装为一个List
        return List对象;
    }
}

2、    生成数据源,必须实现JRDataSource接口
package direction.shoufei.report.groupyearfee.datasource;

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-接口

package direction.shoufei.report.groupyearfee.service;

public interface CenterYearFeeService {
    /**
     * 填充报表
     * @param year 某年的报表
     */
    void fillCenterYearFeeToReport(String year);
}

b-填充报表的实现

package direction.shoufei.report.groupyearfee.service.support;

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工具的使用(三)相关推荐

  1. 实用工具篇(三):Free Mybatis plugin

    实用工具篇(三):Free Mybatis plugin 实用工具篇(一):Postman 实用工具篇(二):SourceTree Free Mybatis plugin 老规矩先吹一波......这 ...

  2. 工具教程第三十一讲:电报的使用(二)

    这里是王团长区块链学院,与最优秀的区块链人一起成长!今天给大家讲讲电报Telegram的使用.   点击观看视频教程:工具教程第三十一讲:电报的使用(二)   第三步.注册使用Telegram 1.点 ...

  3. Java并发工具类(三)Exchanger

    Java并发工具类(三)Exchanger 在J.U.C并发包中提供了一些工具类,可以供我们在日常的开发中,根据不同的情况去进行一些相关的并发控制,具体的类有: CountDownLatch Sema ...

  4. python自动化工具之pywinauto(三)

    python自动化工具之pywinauto(三) python自动化工具之pywinauto三 问题分析 解决方案 选择源文件 配置参数 输出路径选择 等待窗口出现 问题分析 上篇尝试使用脚本进行模拟 ...

  5. 【ireport工具制作报表使用流程】

    [ireport工具制作报表使用流程] 1.ireport使用说明 2.安装包及相关环境下载 3.快速入门上手 如何使用代码生成报表 1.ireport使用说明 ireport 是一款方便实用的报表编 ...

  6. 自动化运维工具——Ansible(三)——分组管理

    自动化运维工具--Ansible(三)--分组管理 1. 通过ip地址分组 1.1 写法一 1.2 写法二 2. 通过主机名分组 2.1 写法一 2.2 写法二 3. 子组 1. 通过ip地址分组 1 ...

  7. 浅谈敏捷开发及Scrum工具leangoo(三)

    之前两篇有说到敏捷开发及Scrum的一些概念及实施,现在再来记录下我们在敏捷开发实施中使用的一些工具,主要说下leangoo 工具不是敏捷开发及Scrum的必须品,但有了工具,可以让敏捷开发更好的实施 ...

  8. 「小程序JAVA实战」微信开发者工具helloworld(三)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-03/ 第一个小程序demo的运行,首选需要去使用开发工具 开发工具下载安装 https://mp. ...

  9. 最强通用编译器优化工具!MIT三篇顶会论文打造,准确率是传统方法5倍

    乾明 十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 新代码在自家芯片上运行状况如何?英特尔自己都没有别人家的新工具清楚. 这就是MIT耗时一年提出的研究成果,名为Ithemal,核心功能 ...

最新文章

  1. php简单算法之冒泡排序
  2. 连接池--在密码修改的影响
  3. jquery如何判断div是否隐藏
  4. Android WebView 支持H5的定位Js
  5. 虚拟机找不到共享文件夹
  6. 服务器维护,日志分析常用命令
  7. php被替代,php 替代被弃用函数的
  8. Android之如何看混淆后的错误日志代码
  9. Linux 用户组权限讲解
  10. javascript参数arguments对象
  11. Python中seek()函数的使用方法--一文读懂
  12. centos安装oracle报错,CentOS安装oracle和rsh服务报错处理
  13. 发酵罐设计软件测试,发酵罐设计的心得体会
  14. python教材答案程序设计导论论文_计算机基础及Python程序设计导论(高等学校通识教育系列教材)...
  15. 苹果手机咋截屏_iOS14设置轻点背面截屏教程 苹果手机截图更方便了
  16. 立体匹配算法-SAD
  17. 【无标题】使用Ping命令制作的批量Ping工具,可对指定Ip进行ping测试,并将结果记录到txt文件
  18. 轻量级Kubernetes之k3s:16:源码编译k3s
  19. 驰骋lims系统菜单
  20. IHE基础技术框架集成规范

热门文章

  1. 动态添加html元素
  2. maven 引入net.sf.json-lib依赖时报错(classifier)
  3. mysql子查询存到另一张表_MySQL多表查询与子查询
  4. PyTorch教程(十二):链式法则
  5. elasticsearch mapping之fields
  6. 深入理解javascript原型和闭包(1)——一切都是对象
  7. Python模块学习 ---- re正则表达式
  8. 二十年编程语言风云,哪款是你的爱豆?
  9. Python中浅拷贝与深拷贝的骚操作
  10. 微信群发即可免费领取电动车,这你也信?