在IReport中,主從報表完成製作後,在IReport中能夠正常編譯、運行及顯示,但加入Java Web應該中時出現下列錯誤:
Could not load object from location : subunitlab.jasper,即主報表找不到子報表的模板(jasper)文件.
主要原因:
主報表找不到子報表的Jasper文件(深入分析)
解決辦法:
在主報表中設置變量SUBREPORT_DIR(若不存在則新建),代表子報表模板文件的真識路徑,設置子報表的屬性Subreport Expression 的值爲:$P{SUBREPORT_DIR}+"subreportname.jasper",通過程序動態設置SUBREPORT_DIR,使得主報表能夠獲得子報表模板文件的真識路徑.
步驟如下:
1.設置主報表變量: SUBREPORT_DIR
VeiwParameters選中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/")+"/");
另:對於多個子報表,做法類似,只需設置子報表屬性即可(前提:所有子報表存放在同一路徑下),若存放在不同的路徑下, 需在主報表中建立多個表示子報表路徑的變量,一一對應到各個子報表上,並通過程序一一設定其真識路徑.