在 Jasper 报表中添加 json 子数据源的正确方法是什么?



我有这个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文件中,我定义了一个子报表,并试图创建一个子DataSource传递给这个子报表。

<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 core正在回购"com.fasterxml.jackson.core"

而iReport一直在请求CCD_ 2。

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

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

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

相关内容

最新更新