在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是比较方便的。由于这个问题困扰了我几天,特此记录。
分享到:
相关推荐
JasperReport是一款强大的开源报表工具,它允许开发者创建复杂、美观的报告,并在Java应用程序、Web应用或独立的报表服务器中使用。在这个场景中,我们关注的是如何在后台通过代码封装来利用JRDataSource方式生成...
iReport 是一个强大的桌面应用程序,用于设计报表模板,而 JasperReport 是一组 Java 类库,用于在应用程序中填充数据并生成报表。 1. **下载 iReport**: - 访问官方下载页面:[http://jasperforge.org/]...
**JasperReport与Servlet在Web应用中的打印预览** JasperReport是一款强大的开源报表工具,它允许开发者在Java应用程序、Web应用甚至独立的Java应用程序中创建复杂的报告。Servlet是Java Web开发中的一个重要组件,...
在IT行业中,报表生成是企业级应用不可或缺的一部分,而JasperReport作为一个强大的开源报表工具,深受开发者喜爱。本文将深入探讨如何在Servlet Web应用中利用JasperReport进行报表的生成与打印,同时会提及必要的...
在Web应用中,Servlet常用于接收和处理用户的请求,而JasperReport则可以作为Servlet的后端服务,生成报表内容。 要实现HTML显示报表,我们需要完成以下步骤: 1. **报表模板设计**:使用JasperReport提供的设计...
7. **嵌入式和独立使用**:JasperReport可以作为Java应用程序的一部分嵌入使用,也可以作为独立的服务器组件,如在JasperServer中部署和管理报表。 8. **国际化支持**:JasperReport支持多语言,用户可以根据需求...
这样做虽然简化了示例,但实际应用中,数据源可能是任何符合JRDataSource接口的对象,包括但不限于数据库查询结果集或者XML文件。 JavaBean在本例中扮演了数据模型的角色,包含城市(city)、ID(id)、姓名(name)和...
JasperReport 中交叉报表指南 JasperReport 是一个功能强大且灵活的报表生成工具,它提供了许多功能来帮助开发者生成复杂的报表。在报表生成中,交叉报表是一种常用的报表类型,能够将数据按照行和列进行交叉处理,...
JasperReport是一种基于Java的报表生成技术,它被广泛应用于企业级应用中用于生成复杂且格式化良好的PDF文档。对于初学者而言,掌握JasperReport的核心概念和技术要点至关重要。 #### 二、基础知识 ##### 1. 入门...
JasperReport和iReport是Java世界中常用的报表生成工具,它们可以帮助开发者轻松创建复杂的报表,并在Web应用程序中集成。在JasperReport 2.0.2和iReport 2.0.2版本中,我们可以实现多种功能,包括字段、变量、参数...
- 这些配置可以在程序启动时加载,使得JasperReport在整个应用中使用指定的字体和设置。 4. **实际应用**: - 在Java应用中,可以通过`JasperCompileManager`和`JasperFillManager`进行编译和填充报表。在生成...
JasperReport中文手册.pdf
JasperReport中文用户手册.pdf
### JasperReport中使用多个数据源的方法详解 #### 场景背景 在报表开发过程中,有时我们需要在一个报表中展示不同来源的数据。例如,在同一份报告中同时呈现交叉表和饼状图,而这两部分数据可能源自不同的数据库表...
JasperReport 是一个开源的报表工具,它允许开发者创建复杂的报告设计,并在各种应用程序中嵌入这些报告。在这个实例中,我们将探讨如何导入并使用一个可用的 JasperReport 示例项目,以理解其工作原理和核心功能。 ...