Java 如何将jasper文件路径传递到子报表的子报表
我将iReport工具与JasperReports 1.3.4结合使用 我有一个主报告,其中包含两个子报告。其中一个子报表具有嵌入式子报表。所有.jasper文件都位于同一目录中 iReport生成了名为Java 如何将jasper文件路径传递到子报表的子报表,java,jasper-reports,Java,Jasper Reports,我将iReport工具与JasperReports 1.3.4结合使用 我有一个主报告,其中包含两个子报告。其中一个子报表具有嵌入式子报表。所有.jasper文件都位于同一目录中 iReport生成了名为子报表\u DIR的参数。子报表表达式将子报表文件名表示为![CDATA[$P{SUBREPORT\u DIR}+“SUBREPORT.jasper”] 当从iReport中生成报告时,一切都很好。但是,我有一个小型Java web应用程序,我正试图使用它来生成报告。我将“SUBREPORT\u
子报表\u DIR
的参数。子报表表达式将子报表文件名表示为![CDATA[$P{SUBREPORT\u DIR}+“SUBREPORT.jasper”]
当从iReport中生成报告时,一切都很好。但是,我有一个小型Java web应用程序,我正试图使用它来生成报告。我将“SUBREPORT\u DIR”
参数传递给JasperFillManager.fillReport(字符串源文件名、映射参数、JRBeanCollectionDatasource)
。此子报告\u DIR
设置为主报告所在的目录
fillReport引发异常:
net.sf.jasperreports.engine.JRException: Could not load object from location :
.sub-subreport.jasper.
第一个子报表似乎正在尝试处理其子报表(嵌入子报表)
,但未解析子报表\u DIR
,或未正确使用该子报表来生成子报表的名称
是否有我遗漏的内容?该如何处理此场景?单击
子报表1
,转到属性选项卡->子报表属性->参数
您将把“主报告”子报告_DIR
参数作为参数传递给“子报告1”。
创建此条目:
名称:SUBREPORT\u DIR
表达式:$P{SUBREPORT\u DIR}
不要忘记重新编译您的报告,并确保在应用程序服务器中重新发布您的web应用程序。我也遇到了同样的问题,并将子报告目录设置为包含我的报告的完整包名 例如: “com/mycomp/myapp/reports/” 我们的设置很相似,所有报告都在同一个目录中。不同的是我正在从桌面(Java SE)运行我的应用程序。但是,我的报告位于jar文件中。当我尝试将子报告目录设置为c:\path\to\app\myapp.jar!\com\mycomp\myapp\reports时,Jasper找不到该文件 希望这有帮助。因为,您的
子报表\u DIR
参数必须从调用报表传递到子报表。
将相对路径与
或/
一起使用是不可靠的,始终首选绝对路径
因此,您必须在jrxml文件中写入:
<subreport isUsingCache="false">
<subreportParameter name="SUBREPORT_DIR">
<subreportParameterExpression><![CDATA[$P{SUBREPORT_DIR}]]></subreportParameterExpression>
</subreportParameter>
<subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "mySubreport.jasper"]]></subreportExpression>
</subreport>
您必须使用
$p{SUBREPORT\u DIR}
传递子报表参数expression
,否则它不会传递参数(仅设置
是不够的)。只需将$p{SUBREPORT\u DIR}
设置为提示并传递您的值(目录路径可能不正确)
类似于
c:\something.jasper
而不是c:\\something.jasper
)将编译的子报表放在java类路径下,例如:Resources/subReport/test.jasper
将您的子报表称为“subreport/test.jasper”将在异常消息中起作用,您似乎正在使用“.”作为subreport_DIR参数。如果是这样,请尝试使用“/”或“.”放在哪里“/”?我现在很困惑,我想您使用的是:parameters.put(“subreport_DIR”);JasperFillManager.fillReport(String sourceFileName,Map parameters,JRBeanCollectionDatasource);尝试使用:parameters.put(“SUBREPORT_DIR”),在java类Param中,我将参数设置为..Param.put(“SUBREPORT_DIR”,filepath),其中filepath=request.getSession(true).getServletContext().getRealPath(“/jsps/jrxmls/”)。根据您的建议,我如何将其更改为“”。然后它将传递空值,对吗?它将传递空字符串值。这将使主报表在其当前路径中查找其子报表。此外,.jasper文件是否与.jrxml文件位于同一文件夹中?