ssm中iReport报表使用json数据源过程体会
前言:做这个一定要有耐心,因为报表本就是数据杂糅到规整的过程,这篇心得会细讲每一步操作,如果只想着一眼到位,建议close tab
在公司中遇到项目,大概是一个这样的需求,有一个列表和一个标题,需要把这些数据一条条的遍历在报表中,然后加个标题,这些都是来自项目里的变量
那么json格式就应该是这样的,下面我会慢慢说,以例子说明,都会标注
解释:为什么是这样,第一,报表中有固定单一属性区域,和自动遍历区域,如下图,那么json的子分类肯定分为两类
{
"dataa": [
{
"country": "china"
}, {
"qq": "ok"
}, {
"qq": "no"
}]
}
图中1.2.3步为基本配置,左边的三个字段,dataa(json里的一级key)、qq(二级集合里的key)、country(二级集合里的key)
但结果往往是出人意料的,具体java代码如下
@RequestMapping(value = "/list.html")
public String getOrderList(Model model) {
InputStream input = new ByteArrayInputStream("\"dataa\": [{ \"country\":\"china\"},{ \"qq\":\"ok\" },{ \"qq\":\"no\" }] }".getBytes());
JRDataSource jrDataSource = null;
try {
jrDataSource = new JsonDataSource(input, "dataa"); //第一个参数写入json数据,第二个参数,以该节点为报表解析节点
} catch (JRException e) {
e.printStackTrace();
}
// 动态指定报表模板url
model.addAttribute("url", "/WEB-INF/jasper/report/cod1.jasper"); //编译好的报表文件
model.addAttribute("format", "pdf"); // 报表格式
model.addAttribute("jrMainDataSource", jrDataSource);
return "iReportView"; // 对应jasper-defs.xml中的bean id }
注意看我的json格式,两种类型读在dataa : [ xx, xx ] 内
按常理说,json格式 [ ] 内存放的应该是统一类型的序列集合,那么这时存放的既有遍历的集合也有单一属性,为什么是这样!
解释:这里实际上是做了封装,注意到集合里(指上文dataa对象里的内容,也就是[ ] 内的内容称为集合)的每个元素都有key=>value的形式了吧,在底层,他首先会遍历取这样的一个集合里,根据一样的key来判断是否是同一类的组合,然后进行遍历
说白了,就是这个集合里,如果key都一致,也就是都是qq的key的话,然后报表的遍历区里有qq这个字段,那么他就会自动遍历集合里所有的key=qq的组合,然后渲染在报表的一行行里
那么,你想在报表里取标题也很简单,直接将字段以集合里的,key命名即可取出
------------------------------------------------------------------------------------------------------------------------------------------------------------------
好了,接下来,就是你自己修饰报表的地方了,有什么不懂可以留言,一般常在,尽量帮你解决,伸出小手点个赞,谢谢
ssm中iReport报表使用json数据源过程体会的更多相关文章
- Vs2010中rdlc报表绑定DataTable数据源
首先,新建一个网站,接着添加数据集,并且命名为student,如下图所示: 在该数据集对象上面添加datatable,并且设置列名,如下图所示: 添加一张报表,命名为student,如下图所示: 向报 ...
- 如何在TFS的过程模板中添加报表
在新建团队项目的过程中,TFS的"新建团队项目向导"会根据用户选择的过程模板类型(CMMI, Scrum,Agile等)自动为团队项目创建一个SSRS(SQL Server Rep ...
- 详细解密FineReport中的报表执行过程
在报表开发工具FineReport中,报表的执行过程大体可分为两步:1.报表计算:2.页面转换. 报表计算过程:先读取我们的sql语句,将完整的sql语句传至数据库服务器,由数据库返回数据给报表服务器 ...
- Java如何大批量从json数据源中按指定符号隔字符串,并修改、删除数据
原文出自:https://blog.csdn.net/seesun2012 package com.seesun2012.com; /** * Java大批量修改.删除数据,按指定标识符分隔字符串 * ...
- C# JSON使用过程中开发的小工具
我在用JSON的过程中,经常要去看一下JSON的结构,而JSON串大不部分时候都是未格式化的数据,一次我不得不用一些网页上的在线解析和格式化工具来进行格式化查看,但是这些网页有时候并不好用:因此就结合 ...
- spring+hibernate 配置多个数据源过程 以及 spring中数据源的配置方式
spring+hibernate 配置多个数据源过程 以及 spring中数据源的配置方式[部分内容转载] 2018年03月27日 18:58:41 守望dfdfdf 阅读数:62更多 个人分类: 工 ...
- 关于iReport报表的分页
问题:二手车认证系统的检测报告采用iReport开发,开发者自定义了一张超级长的纸张,导致打印时自动缩放到了一张A4纸上.需要修改使之能够合理的分页打印,这是来到新公司的第一个任务. 解决方案一: 1 ...
- JSON数据源提供多值参数的实现
一.应用场景 (1)报表的数据内容需要根据某个参数进行过滤. (2)该参数是一个多值参数,即从一个下拉列表中选择一个或多个项目. (3)报表需要自动运行,因此参数必须有默认值. (4)参数默认值无法在 ...
- Fastreport使用经验(转)在Delphi程序中访问报表对象
Fastreport使用经验(转) 在Delphi程序中访问报表对象 最基本的方法就是frxReport1.FindObject. 然后把返回的对象强制转换成它的类型,当然,在报表中必须真的有这么个东 ...
随机推荐
- 一种基于主板BIOS的身份认证方案及实现
.分析AwardBIOSDOS工具cbrom cbrom的功能就是在BIOS文件中添加.删除与提取模块,以便满足用户自己的需求,用法如下: cbromBIOS文件名/参数模块名|RELEASE|EXT ...
- java重写和重载
方法的重载: 在一个类中的两个或两个以上的方法,他们方法名相同但是参数列表不同,这种方式称为方法的重载,方法的重载是实现多态性的方式之一. 参数列表不同指的是参数的个数不同或相同的个数但顺序不同或者类 ...
- 几个平台环境里视频编解码和图像scale的硬件加速的方法
记录一下遇到几个平台里的视频编解码和图像scale的硬件加速的方法 1,intel平台当包含GEN系列的集成GPU时,可用libva实现视频codec.颜色空间转换和图像scale的硬件加速,具体可使 ...
- 《用TCP/IP进行网络互连》读书笔记
<用TCP/IP进行网络互连>读书笔记 第2章,基本网络技术 网络通信分类:基于连接的通信(connection-oriented),基于非连接的通信(connectionless) ...
- ls -l 显示年份
默认情况下ls -l命令只显示月和日,不显示年份: $ ls -llrwxrwxrwx 1 root root 7 Feb 27 16:12 bin -> usr/bin 如要要显示年份,就要使 ...
- 【BZOJ2748】音量调节(动态规划)
[BZOJ2748]音量调节(动态规划) 题面 Description 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都要改变一次音量.在演出开始之前,他已经 ...
- 最长k可重线段集问题
和那道可重区间集一样 不过这道题可能有垂直于x轴的线段,这就很烦了,直接连会有负环,判掉又会WA 可以想办法把r端点和l端点分开,又要保证答案不变 那么直接把区间l,r都乘以2,l=r时r++,否则l ...
- React-Native安装使用
先附上React-Native官方文档中文版:http://wiki.jikexueyuan.com/project/react-native/getting-started.html 好,接下来我们 ...
- jdbc连接数据库并打印的简单例子
6步连接数据库: import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; impor ...
- JQuery AJAX 全局设置
现在需要给每个请求都加一个请求头,挨个修改太麻烦.可以用如下方式: $.ajaxSettings.beforeSend= function(request) { request.setRequestH ...