我有子报表的工作报告,它使用json源文件作为数据源。在这个子报表中,我将路径发送到subReportParameter中的json文件net.sf.jasperreports.json.source
但是,如果我使用JSON IO流作为数据源而不是json源文件,我如何将数据源传递给子报表?对于单个报告,JSON iostream运行良好,但无法在此处弄清楚如何使用子报告。
答案 0 :(得分:2)
要使用json
中的InputStream
,我会使用网址制作和示例,因为这似乎是最有可能使用的。
用于生成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
或仅传递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