jasperreport新版本增加的内置参数

这几天使用了新版本jasperreport升级原有的报表系统,使原有的应用代码引发出一个错误:

[java] java.lang.NullPointerException
[java] at java.util.Hashtable.put(Hashtable.java:393)
[java] at net.sf.jasperreports.engine.fill.JRFillDataset.setParameterValues(JRFillDataset.java:558)

本问题解决,使用JasperFillManager.fillReport方法中Map参数应该使用HashMap不能使用Hashtable

[@more@]

这几天使用了新版本jasperreport升级原有的报表系统,使原有的应用代码引发出一个错误:

[java] java.lang.NullPointerException
[java] at java.util.Hashtable.put(Hashtable.java:393)
[java] at net.sf.jasperreports.engine.fill.JRFillDataset.setParameterValues(JRFillDataset.java:558)
[java] at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:874)
[java] at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:689)
[java] at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:647)
[java] at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:63)
[java] at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402)
[java] at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:188)
[java] at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:94)
......

追查发生空指针的代码为:

protected void setParameterValues(Map parameterValues) throws JRException
{
parameterValues.put(JRParameter.REPORT_PARAMETERS_MAP, parameterValues);

reportMaxCount = (Integer) parameterValues.get(JRParameter.REPORT_MAX_COUNT);

locale = (Locale) parameterValues.get(JRParameter.REPORT_LOCALE);
if (locale == null)
{
locale = Locale.getDefault();
parameterValues.put(JRParameter.REPORT_LOCALE, locale);
}

resourceBundle = (ResourceBundle) parameterValues.get(JRParameter.REPORT_RESOURCE_BUNDLE);
if (resourceBundle == null)
{
resourceBundle = loadResourceBundle();
parameterValues.put(JRParameter.REPORT_RESOURCE_BUNDLE, resourceBundle);//本行抛出空指针错误
}

parameterValues.put(JRParameter.REPORT_SCRIPTLET, scriptlet);

setFillParameterValues(parameterValues);

setDatasource();
}
郁闷,狂查为啥resourceBundle为空,无果,其默认值就是null

发现jasper里使用的parameterValues为java.util.HashMap类,而我的应用中传递的参数使用的是java.util.Hashtable类,由于jasperreport调用方法中使用的Map接口类型导致都可以使用,但是新版本中引入REPORT_RESOURCE_BUNDLE的参数无默认值,使得发生put空值,从而应用中不应该使用Hashtable,因为Hashtable不允许put空值;相反使用HashMap则不抛出错误。

所以本问题解决,将应用中的Hashtable统统改成HashMap。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/67736/viewspace-833767/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/67736/viewspace-833767/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值