在Jasper Reports中添加json subDataSource的正确方法是什么?

时间:2016-04-14 14:51:51

标签: jasper-reports jackson ireport

我有这个json DS:

{  
   "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

我尝试使用问题http://community.jaspersoft.com/questions/956036/caused-javalangclassnotfoundexception-orgcodehausjacksonjsonnode-exception-ireport

的答案

但它不起作用。 问题是目前jackson核心位于回购"com.fasterxml.jackson.core"

之下

而iReport一直要求"org.codehaus.jackson.core"

尝试寻找org.codehaus下的旧版jackson核心,并将它们添加到iReport类路径中,但它仍然不起作用。 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

通常你不需要转换表达式。 尝试:<![CDATA[$P{REPORT_DATA_SOURCE}.subDataSource("workSiteRows")]]>

在我的情况下这很好用。 在你的情况下,subDataSource是一个数组,也许你也可以尝试使用一个对象。