在Jasper Reports中添加json subDataSource的正确方法是什么?
问题描述:
我有这样的json DS:在Jasper Reports中添加json subDataSource的正确方法是什么?
{
"customername":"home",
"workSiteRows":[
{
"invoiceRows":[
{
"candidateName":"name1",
"units":"13:00"
},
{
"candidateName":"name2",
"units":"18:30"
}
],
"workSiteName":"wsname1"
},
{
"invoiceRows":[
{
"candidateName":"name1",
"units":"13:00"
},
{
"candidateName":"name2",
"units":"18:30"
}
],
"workSiteName":"wsname2"
}
]
}
在我的.jrxml文件,我已经定义了一个报表,我试图创建一个subDataSource传递给该报表。
<subreport isUsingCache="false">
<reportElement x="0" y="10" width="555" height="30" uuid="b2d96c34-ad5d-4eb2-b218-43aad4e09282" />
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).dataSource("workSiteRows")]]></dataSourceExpression>
<subreportExpression><![CDATA[$P{REPORT_DIR} + "\\invoice_ws_row.jasper"]]></subreportExpression>
</subreport>
我不断收到以下异常: 错误填写打印...
java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonNode java.lang.ClassNotFoundException: org.codehaus.jackson.JsonNode
但它不工作。 问题是,目前杰克逊核心是根据回购"com.fasterxml.jackson.core"
而iReport不断要求"org.codehaus.jackson.core"
。
尝试寻找位于org.codehaus下的老版本的jackson核心,并将它们添加到iReport类路径中,但它仍然无效。 任何想法?
答
通常情况下,您不需要投射表情。 尝试:<![CDATA[$P{REPORT_DATA_SOURCE}.subDataSource("workSiteRows")]]>
这对我的情况很好。 在你的情况下,subDataSource是一个数组,也许你也可以尝试使用一个对象。
它的工作原理。谢谢。 *** facepalm ***,顺便说一句,你有没有使用Jasper Reports的其他选择? – ionutab
不客气。我只知道贾斯珀报告,它的免费和最好的解决方案,但仍然有很多facepalm时刻使用它:) – hering
我正在使用JasperSoft Studio 6.2.1,并且不可能使用'subDataSource'方法而无需投射到'net.sf.jasperreports.engine.data.JsonDataSource' –