我正在尝试从java中动态编译子报告。 我将子报表表达式放在MAIN报表中,如下所示。
<subreportExpression class="net.sf.jasperreports.engine.JasperReport"><![CDATA[SubReportCompiler.getCompiledReport("reportId")]]></subreportExpression>
我的子报告编译器代码如下:
public class SubReportCompiler {
private static final String JR_XML_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ "<!DOCTYPE jasperReport PUBLIC \"-//JasperReports//DTD Report Design//EN\" \"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd\">";
public static JasperReport getCompiledReport(String reportId)
{
Report report = Report.getReportObject(reportId, applicationId);
String jasperXML=JR_XML_HEADER + report.getJASPERXML();
InputStream jrXMLStream = new ByteArrayInputStream(jasperXML.getBytes());
JasperReport jReport;
try {
jReport = JasperCompileManager.compileReport(jrXMLStream);
} catch (JRException e) {
throw new ReportException(e.getMessage(), e);
}
catch (Exception e)
{
throw new ReportException(e.getMessage(), e);
}
return jReport;
}
}
当我尝试从java执行主报告时。我收到以下错误。
(java.lang.String)没有这样的属性:类的SubReportCompiler:report2_1280833699753_269232
我是否需要注册任何属性?如何在执行主报表的同时从java中动态编译子报表?
答案 0 :(得分:1)
放置SubReportCompiler类的位置?它是放在应用程序Java包中的某个位置吗?如果是,则应在JRXML中指定完全限定的类名:
<subreportExpression class="net.sf.jasperreports.engine.JasperReport"> <![CDATA[mypackage.SubReportCompiler .getCompiledReport("reportId")]]></subreportExpression>
将上面代码中的“mypackage”替换为您的包名。