`
bit6211
  • 浏览: 74307 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jasperreport中JRDataSource之JRMapArrayDataSource的应用

    博客分类:
  • j2ee
 
阅读更多
       在jasperreport中,当我们填充数据到.jasper文件,来生成.jrprint文件时,常用的一个JRDataSource类是, JRBeanCollectionDataSource,这个类的构造方法是,public JRMapCollectionDataSource(java.util.Collection col) ,col参数这就大家熟悉的javabean list数组了。该类的用法在网上有许多例子,这里就不重复了。
        而JRDataSource的另一个实现类JRMapArrayDataSource,它的构造方法如下,public JRMapArrayDataSource(Object[] array),其中array参数是一个数组。我们来看该类的源代码,如下:
public class JRMapArrayDataSource implements JRRewindableDataSource
{


/**
*
*/
private Object[] records = null;
private int index = -1;


/**
*
*/
public JRMapArrayDataSource(Object[] array)
{
records = array;
}


/**
*
*/
public Object getFieldValue(JRField field)
{
Object value = null;

Map currentRecord = (Map)records[index];

if (currentRecord != null)
{
value = currentRecord.get(field.getName());
}

return value;
}

......
}
我们通过records = array;和Map currentRecord = (Map)records[index];可以得知,array参数是一个map数组。那这有什么好处呢?
       我在开发中发现了一个好处是,由于开发中需要动态生成.jrxml文件(我用xom开源jar包来生成),然后再compile为.jasper文件。而在.jrxml文件中,field是需要动态生成的,其中field的name和个数是不固定的,如下所示,
<field name="name" class="java.lang.String">
        <fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<field name="address" class="java.lang.String">
        <fieldDescription><![CDATA[address]]></fieldDescription>
</field>
......
这样在填充数据时,如果使用JRMapCollectionDataSource来填充,则构造的javabean就必须事先定义了field的所有变量,这是比较麻烦的。而如果用JRMapArrayDataSource来填充,我们可以在需要填充的时候,才创建合适的map,并把map放到数组里,如下所示,
Object[] objs = new Object[100];
for(int i = 0; i < 100; i++)
{
Map map = new HashMap();
map.put("name", "name" + i);
map.put("address", "address" + i);
objs[i] = map;
}
JRDataSource dataSource = new JRMapArrayDataSource(objs);
所以,在这种情况下,用JRMapArrayDataSource是比较方便的。由于这个问题困扰了我几天,特此记录。
3
2
分享到:
评论
2 楼 inpt 2012-06-03  
终于解决了,少了一个next()方法,居然折腾了好几天
1 楼 inpt 2012-05-30  
大侠,有完整的例子吗?

相关推荐

    JasperReport 后台 代码 封装,采用JRDataSource方式

    JasperReport是一款强大的开源报表工具,它允许开发者创建复杂、美观的报告,并在Java应用程序、Web应用或独立的报表服务器中使用。在这个场景中,我们关注的是如何在后台通过代码封装来利用JRDataSource方式生成...

    JasperReport iReport 集成到web应用操作说明

    iReport 是一个强大的桌面应用程序,用于设计报表模板,而 JasperReport 是一组 Java 类库,用于在应用程序中填充数据并生成报表。 1. **下载 iReport**: - 访问官方下载页面:[http://jasperforge.org/]...

    JasperReport+Servlet Web应用之:打印预览

    **JasperReport与Servlet在Web应用中的打印预览** JasperReport是一款强大的开源报表工具,它允许开发者在Java应用程序、Web应用甚至独立的Java应用程序中创建复杂的报告。Servlet是Java Web开发中的一个重要组件,...

    JasperReport+Servlet Web应用之:打印

    在IT行业中,报表生成是企业级应用不可或缺的一部分,而JasperReport作为一个强大的开源报表工具,深受开发者喜爱。本文将深入探讨如何在Servlet Web应用中利用JasperReport进行报表的生成与打印,同时会提及必要的...

    JasperReport + Servlet Web应用之:HTML显示报表内容

    在Web应用中,Servlet常用于接收和处理用户的请求,而JasperReport则可以作为Servlet的后端服务,生成报表内容。 要实现HTML显示报表,我们需要完成以下步骤: 1. **报表模板设计**:使用JasperReport提供的设计...

    JasperReport中文翻译用户手册.pdf

    7. **嵌入式和独立使用**:JasperReport可以作为Java应用程序的一部分嵌入使用,也可以作为独立的服务器组件,如在JasperServer中部署和管理报表。 8. **国际化支持**:JasperReport支持多语言,用户可以根据需求...

    Struts2+JasperReport报表应用

    这样做虽然简化了示例,但实际应用中,数据源可能是任何符合JRDataSource接口的对象,包括但不限于数据库查询结果集或者XML文件。 JavaBean在本例中扮演了数据模型的角色,包含城市(city)、ID(id)、姓名(name)和...

    JasperReport 中交叉报表指南

    JasperReport 中交叉报表指南 JasperReport 是一个功能强大且灵活的报表生成工具,它提供了许多功能来帮助开发者生成复杂的报表。在报表生成中,交叉报表是一种常用的报表类型,能够将数据按照行和列进行交叉处理,...

    JasperReport 学习之路

    JasperReport是一种基于Java的报表生成技术,它被广泛应用于企业级应用中用于生成复杂且格式化良好的PDF文档。对于初学者而言,掌握JasperReport的核心概念和技术要点至关重要。 #### 二、基础知识 ##### 1. 入门...

    Jasperreport+ireport 实践操作及web应用

    JasperReport和iReport是Java世界中常用的报表生成工具,它们可以帮助开发者轻松创建复杂的报表,并在Web应用程序中集成。在JasperReport 2.0.2和iReport 2.0.2版本中,我们可以实现多种功能,包括字段、变量、参数...

    jasperReport中文字体和配置.rar

    - 这些配置可以在程序启动时加载,使得JasperReport在整个应用中使用指定的字体和设置。 4. **实际应用**: - 在Java应用中,可以通过`JasperCompileManager`和`JasperFillManager`进行编译和填充报表。在生成...

    JasperReport中文手册.pdf

    JasperReport中文手册.pdf

    JasperReport中文用户手册.pdf

    JasperReport中文用户手册.pdf

    JasperReport中使用多个数据源的方法

    ### JasperReport中使用多个数据源的方法详解 #### 场景背景 在报表开发过程中,有时我们需要在一个报表中展示不同来源的数据。例如,在同一份报告中同时呈现交叉表和饼状图,而这两部分数据可能源自不同的数据库表...

    JasperReport实例导入可用

    JasperReport 是一个开源的报表工具,它允许开发者创建复杂的报告设计,并在各种应用程序中嵌入这些报告。在这个实例中,我们将探讨如何导入并使用一个可用的 JasperReport 示例项目,以理解其工作原理和核心功能。 ...

Global site tag (gtag.js) - Google Analytics