JSON 数据源 JasperReports 中的可选字段
Optional fields from JSON datasource JasperReports
我正在使用 JSON 数据源在 JasperReport 中创建报告。 iReport 内部字段被声明为整数。该字段在其他字段中的行中使用。
输入JSON例子:
[{
"dateFrom": "01.12.2016",
"dateTo": "01.12.2016",
"someOptionalNumber": 12
},
{
"dateFrom": "01.12.2016",
"dateTo": "01.12.2016"
}, {
"dateFrom": "01.12.2016",
"dateTo": "01.12.2016",
"someOptionalNumber": 11
}]
字段声明:
<field name="someOptionalNumber" class="java.lang.Integer"/>
问题是在输入 JSON 中 someOptionalNumber 是可选的,因此并非每一行都存在。字段可以是可选的吗?
当我 运行 这样 JSON 我得到这个错误:
原因:net.sf.jasperreports.engine.JRException:无法获取 class 的字段 'someOptionalNumber' 的值 'java.lang.Integer'
play.api.http.HttpErrorHandlerExceptions$$anon: Execution exception[[JRException: Unable to get value for field 'someOptionalNumber' of class 'java.lang.Integer']]
...
Caused by: net.sf.jasperreports.engine.JRException: Unable to get value for field 'someOptionalNumber' of class 'java.lang.Integer'
at net.sf.jasperreports.engine.data.JsonDataSource.getFieldValue(JsonDataSource.java:241)
at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:1358)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1259)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1235)
at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1588)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:149)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:939)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:871)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:114)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:969)
at reporting.engine.ReportEngine$.reporting$engine$ReportEngine$$createPDF(ReportEngine.scala:64)
...
Caused by: org.apache.commons.beanutils.ConversionException: Unparseable number: ""
at org.apache.commons.beanutils.locale.BaseLocaleConverter.convert(BaseLocaleConverter.java:241)
at org.apache.commons.beanutils.locale.LocaleConvertUtilsBean.convert(LocaleConvertUtilsBean.java:285)
at net.sf.jasperreports.engine.data.JRAbstractTextDataSource.convertStringValue(JRAbstractTextDataSource.java:70)
at net.sf.jasperreports.engine.data.JsonDataSource.getFieldValue(JsonDataSource.java:231)
... 49 common frames omitted
Caused by: java.text.ParseException: Unparseable number: ""
at java.text.NumberFormat.parse(NumberFormat.java:385)
at org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter.parse(DecimalLocaleConverter.java:253)
at org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter.parse(IntegerLocaleConverter.java:218)
at org.apache.commons.beanutils.locale.BaseLocaleConverter.convert(BaseLocaleConverter.java:232)
我使用的是 5.5.1 版本的 JasperReports,升级到最新版本 (6.3.1) 解决了问题 dada67 sugested
我正在使用 JSON 数据源在 JasperReport 中创建报告。 iReport 内部字段被声明为整数。该字段在其他字段中的行中使用。
输入JSON例子:
[{
"dateFrom": "01.12.2016",
"dateTo": "01.12.2016",
"someOptionalNumber": 12
},
{
"dateFrom": "01.12.2016",
"dateTo": "01.12.2016"
}, {
"dateFrom": "01.12.2016",
"dateTo": "01.12.2016",
"someOptionalNumber": 11
}]
字段声明:
<field name="someOptionalNumber" class="java.lang.Integer"/>
问题是在输入 JSON 中 someOptionalNumber 是可选的,因此并非每一行都存在。字段可以是可选的吗?
当我 运行 这样 JSON 我得到这个错误:
原因:net.sf.jasperreports.engine.JRException:无法获取 class 的字段 'someOptionalNumber' 的值 'java.lang.Integer'
play.api.http.HttpErrorHandlerExceptions$$anon: Execution exception[[JRException: Unable to get value for field 'someOptionalNumber' of class 'java.lang.Integer']]
...
Caused by: net.sf.jasperreports.engine.JRException: Unable to get value for field 'someOptionalNumber' of class 'java.lang.Integer'
at net.sf.jasperreports.engine.data.JsonDataSource.getFieldValue(JsonDataSource.java:241)
at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:1358)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1259)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1235)
at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1588)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:149)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:939)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:871)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:114)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:969)
at reporting.engine.ReportEngine$.reporting$engine$ReportEngine$$createPDF(ReportEngine.scala:64)
...
Caused by: org.apache.commons.beanutils.ConversionException: Unparseable number: ""
at org.apache.commons.beanutils.locale.BaseLocaleConverter.convert(BaseLocaleConverter.java:241)
at org.apache.commons.beanutils.locale.LocaleConvertUtilsBean.convert(LocaleConvertUtilsBean.java:285)
at net.sf.jasperreports.engine.data.JRAbstractTextDataSource.convertStringValue(JRAbstractTextDataSource.java:70)
at net.sf.jasperreports.engine.data.JsonDataSource.getFieldValue(JsonDataSource.java:231)
... 49 common frames omitted
Caused by: java.text.ParseException: Unparseable number: ""
at java.text.NumberFormat.parse(NumberFormat.java:385)
at org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter.parse(DecimalLocaleConverter.java:253)
at org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter.parse(IntegerLocaleConverter.java:218)
at org.apache.commons.beanutils.locale.BaseLocaleConverter.convert(BaseLocaleConverter.java:232)
我使用的是 5.5.1 版本的 JasperReports,升级到最新版本 (6.3.1) 解决了问题 dada67 sugested