有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JasperReports:找不到子报表

这让我发疯。。上个小时,我试图弄明白为什么我的报告在添加子报告后立即停止工作。。 我已经检查并尝试了所有类似的问题hereherehere。 没有成功。。子报表肯定在同一目录中。。 定义如下:

<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

为什么


共 (4) 个答案

  1. # 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. # 2 楼答案

    在第一条信息中,作者说:

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

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

    第二:有时候jasper找不到子报表,即使路径是正确的

    解决这个问题的方法是:

    1. $P{SUBREPORT_DIR}传递到main报告中(在本例中为:“/valid/path/”),将此参数放入HashMap<String, Object>标准方式,将参数传递到jasper中
    2. $P{SUBREPORT_DIR}从主报表传递到子报表作为参数:$P{SUBREPORT_DIR}main report->^子报表的{}(当存在子报表时使用这种方式,它从子报表调用)
    3. 在主报表中,将子报表的表达式设置为$P{SUBREPORT_DIR}+“sub.report.jasper
  3. # 3 楼答案

    我之前有过这个问题。 我的方法是-我在一个参数中发送绝对文件夹,比如folder\u path。然后在子报告表达式中,我使用了
    new File(($P{folder_path} + "*.jasper" )
    这个*。jasper文件可以替换为"\\inner_folder\\*.jasper"。 这很有效

  4. # 4 楼答案

    尝试从代码中发送子报告\u DIR参数。也许它不见了。。。 如果使用maven,请检查pom中的资源目录标记。并对它们进行比较

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