2010-08-03 73 views
0

我想從java編譯一個子報告。 我把子報表表達式放在MAIN報告中,如下所示。如何在主報表在ireport中執行時編譯子報表?

<subreportExpression class="net.sf.jasperreports.engine.JasperReport"><![CDATA[SubReportCompiler.getCompiledReport("reportId")]]></subreportExpression>

我subreportcompiler代碼如下:

公共類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編譯子報表?

回答

1

SubReportCompiler類放在哪裏?它是否放置在應用程序Java包中的某個位置?如果是的話,你應該在JRXML指定完全合格的類名:

<subreportExpression class="net.sf.jasperreports.engine.JasperReport"> 
<![CDATA[mypackage.SubReportCompiler 
.getCompiledReport("reportId")]]></subreportExpression>

的代碼替換上面你的包名「mypackage的」。

+0

It works ... thanks Andrey ... :) – Jagadesh 2010-11-17 07:04:34

相關問題