2015-12-03 52 views
2

我有一个使用json源文件作为数据源的子报表工作报告。在这里为子报表发送路径到子报表json文件net.sf.jasperreports.json.sourceJasper Report - 将json IO流传递给子报表

但是,如果我使用JSON IO流作为数据源而不是json源文件,我如何将数据源传递给子报表?对于单个报表,JSON iostream运行良好,但无法弄清楚如何在此处使用子报表。

回答

2

要使用从InputStreamjson,我会和使用URL例子,因为这似乎对最可能使用。

的java代码来生成JsonDataSource

InputStream iostream = new URL("http://www.w3schools.com/website/Customers_MYSQL.php").openStream(); //Natrually this code is not need if you already have the iostrem 
JsonDataSource dsSupReeport = new JsonDataSource(iostream);; 

如何将它作为参数(允许做2实施例在一个),传递整个JsonDataSource或只是StringURL的值

在java设置你想要传递给你的报告的parameter(fillManager)

Map<String,Object> paramMap = new HashMap<String,Object>(); 
paramMap.put("datasource", new JsonDataSource(new URL("http://www.w3schools.com/website/Customers_MYSQL.php").openStream())); 
paramMap.put("urlToDataSource", "http://www.w3schools.com/website/Customers_MYSQL.php"); 

在报告设置与正确的类参数

<parameter name="datasource" class="net.sf.jasperreports.engine.data.JsonDataSource" isForPrompting="false"/> 
<parameter name="urlToDataSource" class="java.lang.String" isForPrompting="false"/> 

,然后用使用它们的dataSourceExpressionJsonDataSource是:

<dataSourceExpression><![CDATA[$P{datasource}]]></dataSourceExpression> 

或使用URL的String

<dataSourceExpression><![CDATA[new JsonDataSource(new URL($P{urlToDataSource}).openStream())]]></dataSourceExpression> 

注意:如果您的数据已经存在于主数据源(不需要新的JsonDataSource),您可以使用子数据集。 Example of subdataset

相关问题