Jasper Report - 将json IO流传递给子报告

时间:2015-12-03 02:59:59

标签: json jasper-reports iostream

我有子报表的工作报告,它使用json源文件作为数据源。在这个子报表中,我将路径发送到subReportParameter中的json文件net.sf.jasperreports.json.source

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

1 个答案:

答案 0 :(得分:2)

要使用json中的InputStream,我会使用网址制作和示例,因为这似乎是最有可能使用的。

用于生成JsonDataSource

java 代码
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或仅传递String的{​​{1}}值

在java 中设置您希望传递给报告的URL(fillManager)

parameter

在报告中使用正确的类

设置参数
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"/> dataSourceExpression使用它们:

JsonDataSource

或使用网址的<dataSourceExpression><![CDATA[$P{datasource}]]></dataSourceExpression>

String

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