java JasperReports:找不到子报表
这让我发疯。。上个小时,我试图弄明白为什么我的报告在添加子报告后立即停止工作。。 我已经检查并尝试了所有类似的问题here、here和here。 没有成功。。子报表肯定在同一目录中。。 定义如下:
<subreport isUsingCache="false">
<reportElement uuid="db816b3c-a13d-440f-a6a2-f899762e61e4" x="0" y="89" width="555" height="100"/>
<subreportParameter name="footerAddress">
<subreportParameterExpression><![CDATA[$P{footerAddress}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="footerManager">
<subreportParameterExpression><![CDATA[$P{footerManager}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="footerContact">
<subreportParameterExpression><![CDATA[$P{footerContact}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="footerBank">
<subreportParameterExpression><![CDATA[$P{footerBank}]]></subreportParameterExpression>
</subreportParameter>
<subreportExpression class="net.sf.jasperreports.engine.JasperReport"><![CDATA[$P{SUBREPORT_DIR}]]></subreportExpression>
</subreport>
其中$p{SUBREPORT_DIR}是"/valid/path/sub.report.jasper"
我仍然得到一个错误:Resource not found at /valid/path/sub.report.jasper
为什么
# 1 楼答案
这种情况时不时发生在我身上,平台操作系统一直是决定某些代码是否有效的关键因素。然而,一直有效的是相对引用,而不是绝对引用
我的建议是,如果cjava的解决方案不起作用,那就是找出JasperReports在磁盘上做了什么。根据您的平台*nix、Windows,您可能需要了解运行的系统调用JasperReports是什么,以找到它使用的路径。在我的应用程序中,我发现即使我指定了一个以前有效的无路径引用,一些平台也会以不同的方式进行路径搜索,并且无法找到报告
有关如何排除系统调用故障的其他一些问题:
*尼克斯-斯特拉斯
strace java applet
Windows-进程监视器
On Windows, how can I find what files a given process is using? Is there software that does this?
Mac-DTRUS
ltrace equivalent for osx?
祝你好运
# 2 楼答案
在第一条信息中,作者说:
其中,
$P{SUBREPORT_DIR}
是“/valid/path/sub.report.jasper
”$P{SUBREPORT_DIR}
是目录,但不是文件名。这是第一个错误第二:有时候jasper找不到子报表,即使路径是正确的
解决这个问题的方法是:
$P{SUBREPORT_DIR}
传递到main报告中(在本例中为:“/valid/path/
”),将此参数放入HashMap<String, Object>
标准方式,将参数传递到jasper中李>$P{SUBREPORT_DIR}
从主报表传递到子报表作为参数:$P{SUBREPORT_DIR}
main report->^子报表的{$P{SUBREPORT_DIR}
+“sub.report.jasper
”# 3 楼答案
我之前有过这个问题。 我的方法是-我在一个参数中发送绝对文件夹,比如folder\u path。然后在子报告表达式中,我使用了
new File(($P{folder_path} + "*.jasper" )
这个*。jasper文件可以替换为
"\\inner_folder\\*.jasper"
。 这很有效# 4 楼答案
尝试从代码中发送子报告\u DIR参数。也许它不见了。。。 如果使用maven,请检查pom中的资源目录标记。并对它们进行比较