2016-04-14 159 views
0

我有這樣的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 

我嘗試使用回答問題http://community.jaspersoft.com/questions/956036/caused-javalangclassnotfoundexception-orgcodehausjacksonjsonnode-exception-ireport

但它不工作。 問題是,目前傑克遜核心是根據回購"com.fasterxml.jackson.core"

而iReport不斷要求"org.codehaus.jackson.core"

嘗試尋找位於org.codehaus下的老版本的jackson核心,並將它們添加到iReport類路徑中,但它仍然無效。 任何想法?

回答

1

通常情況下,您不需要投射表情。 嘗試:<![CDATA[$P{REPORT_DATA_SOURCE}.subDataSource("workSiteRows")]]>

這對我的情況很好。 在你的情況下,subDataSource是一個數組,也許你也可以嘗試使用一個對象。

+0

它的工作原理。謝謝。 *** facepalm ***,順便說一句,你有沒有使用Jasper Reports的其他選擇? – ionutab

+1

不客氣。我只知道賈斯珀報告,它的免費和最好的解決方案,但仍然有很多facepalm時刻使用它:) – hering

+0

我正在使用JasperSoft Studio 6.2.1,並且不可能使用'subDataSource'方法而無需投射到'net.sf.jasperreports.engine.data.JsonDataSource' –

相關問題