如何将jasper文件路径传递给子报表的子报表
我正在使用iReport工具和JasperReports 1.3.4。
我有一个主报告,其中包含两个子报告。 其中一个子报表具有嵌入式子报表。 所有.jasper文件都驻留在同一目录中。
iReport生成了名为SUBREPORT_DIR
的参数。 ![CDATA[$P{SUBREPORT_DIR} + "subreport.jasper"]
将子报告文件名表示为![CDATA[$P{SUBREPORT_DIR} + "subreport.jasper"]
。
从iReport内部生成报告时,一切都很有效。 但是,我有一个小的Java Web应用程序,我试图用来生成报告。 我将"SUBREPORT_DIR"
参数传递给JasperFillManager.fillReport(String sourceFileName, Map parameters, JRBeanCollectionDatasource)
。 此SUBREPORT_DIR
设置为主报告所在的目录。
fillReport抛出exception:
net.sf.jasperreports.engine.JRException: Could not load object from location : .sub-subreport.jasper.
看起来第一SUBREPORT_DIR
报表正在尝试处理其subreport(embedded subreport)
,但SUBREPORT_DIR
未被解析,或者未正确使用以生成子子报表的名称。
有什么我想念的吗? 该方案应该如何处理?
单击Subreport1
,转到properties tab -> Subreport properties -> Parameters
您将’ MasterReport’SUBREPORT_DIR参数作为参数传递给’ Subreport1 ‘。 创建此条目:
名称: SUBREPORT_DIR
表达式: $P{SUBREPORT_DIR}
不要忘记重新编译报告,并确保在应用程序服务器中重新发布您的Web应用程序。
我遇到了同样的问题,并将SUBREPORT_DIR设置为包含我的报告的完整包名。
例如:
“COM / mycomp / MYAPP /报告/”
我们的设置类似,因为您在同一目录中包含所有报告。 不同之处在于我从桌面运行我的应用程序(Java SE)。 但是,我的报告位于一个jar文件中。 当我尝试将SUBREPORT_DIR设置为c:\ path \ to \ app \ myapp.jar!\ com \ mycomp \ myapp \ reports时,Jasper无法找到该文件。
希望这可以帮助。
正如Marcio已经解释的那样 ,您的SUBREPORT_DIR
参数必须从调用报告传递到子报告。 使用相对路径.
或./
不可靠,绝对的路径总是喜欢。
所以你必须在你的jrxml文件中写:
你必须使用$P{SUBREPORT_DIR}
传递$P{SUBREPORT_DIR}
,elswise它不会传递参数(仅设置
是不够的)。
只需将$P{SUBREPORT_DIR}
为提示并传递您的值(该目录的路径可能无效,如c:\something.jasper
而不是c:\\something.jasper
)