jasperreport中JRDataSource之JRMapArrayDataSource的应用

在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是比较方便的。由于这个问题困扰了我几天,特此记录。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值