JasperReports:无法找到子报告

它让我发疯了。最后一小时我试图找出为什么我的报告在我添加子报告后停止工作了……我已经检查并尝试了所有类似的问题, 这里和这里 。 没有成功..子报告肯定在同一个目录中..定义如下:

                

其中$ P {SUBREPORT_DIR}是"/valid/path/sub.report.jasper"

我仍然收到错误: Resource not found at /valid/path/sub.report.jasper

为什么??

在第一条消息作者说:

其中$P{SUBREPORT_DIR}是“ /valid/path/sub.report.jasper

$P{SUBREPORT_DIR}是一个目录 ,但不是文件名 。 这是第一个错误。

第二种:有时碧玉无法找到子报告,即使路径是正确的。

解决这个问题的方法:

  1. $P{SUBREPORT_DIR}传递给报表(在本例中为“ /valid/path/ ”),将此参数放入HashMap – 标准方式将参数传递给jasper。
  2. $P{SUBREPORT_DIR} 从主报表传递到子报表作为参数: $P{SUBREPORT_DIR}主报表 – > $P{SUBREPORT_DIR}子报表(这种方式在存在子报表时使用,从子报表调用)
  3. 在主报表中将子报表的表达式设置为$P{SUBREPORT_DIR} +“ sub.report.jasper

我之前有过这个问题。 我的方法是 – 我在一个参数说file_path发送绝对文件夹。然后在我正在使用的子报表中
new File(($P{folder_path} + "*.jasper" )
这个* .jasper文件可以替换为"\\inner_folder\\*.jasper" 。 这非常有效

这种情况经常发生在我身上,它一直是一个平台操作系统,它是一些代码工作原因的关键决定因素,而其他代码则不然。 然而,一直有效的是相对引用而不是绝对引用。

我的建议是,如果cjava的解决方案不起作用,就是找出JasperReports在磁盘上做了什么。 根据您的平台,* nix,Windows,您可能需要确定正在运行的系统调用JasperReports以查找它正在使用的路径。 在我的应用程序中,我发现尽管我指定了之前有效的无路径引用,但某些平台会以不同的方式进行搜索,并且无法找到报告。

有关如何解决系统调用问题的其他一些问题:

* nix – Strace

strace java applet

Windows – 进程监视器

在Windows上,如何查找给定进程使用的文件? 有软件可以做到吗?

Mac – DTruss

ltrace相当于osx?

祝你好运。

尝试从代码中发送SUBREPORT_DIR参数。 也许它丢失了……如果你使用maven,请检查pom.xml中的资源目录标记并进行比较。

 params.put("SUBREPORT_DIR", "reports/report/blablaFolder/");