日期:2014-05-16  浏览次数:20853 次

jasper 子报表无法找到

网上有这样的说法

主要原因:
主报表找不到子报表的Jasper文件(深入分析)
解决办法:
在主报表中设置变量SUBREPORT_DIR(若不存在则新建),代表子报表模板文件的真识路径,设置子报表的属性Subreport Expression 的值为:$P{SUBREPORT_DIR}+"subreportname.jasper",通过程序动态设置SUBREPORT_DIR,使得主报表 能够获得子报表模板文件的真识路径.
步骤如下:
1.设置主报表变量: SUBREPORT_DIR
Veiw?Parameters?选中SUBREPORT_DIR变量名?Modify?设置Default value Expression的值为:””;
2.修改子报表属性
在主报表中右击子报表,选择Subreport(other)选项,设置Subreport Expression的值为:$P{SUBREPORT_DIR}+"subreportname.jasper"
3.在Action中动态获得子报表的真实路径,设置成SUBREPORT_DIR变量的值:param.setParameters("SUBREPORT_DIR",request.getRealPath("/Reports/")+"/");
另:对于多个子报表,做法类似,只需设置子报表属性即可(前提:所有子报表存放在同一路径下),若存放在不同的路径下, 需在主报表中建立多个表示子报表路径的变量,一一对应到各个子报表上,并通过程序一一设定其真实路径

?

如果传递参数麻烦,最后的做法是

在报表中,传递参数



?

如果是三层子报表,类似,分别要传递下去,根报表会由jasper赋值为跟报表所在位置,但是子报表却没有被赋值,所以这里的赋值工作必须我们人工传递下去,直到最后一层报表