我正在检查以下问题JasperReports fillReport too slow and resource consuming,我尝试应用经过验证的答案,但没有注意到报告生成方面的任何变化。

基本上,我想做的是将JasperFillManager的xpath执行器工厂更改为使用Jaxen而不是Xalan,但是我似乎不知道应该将以下行放在代码中

    DefaultJasperReportsContext context = DefaultJasperReportsContext.getInstance();
    JRPropertiesUtil.getInstance(context).setProperty("net.sf.jasperreports.xpath.executer.factory",
                                                      "net.sf.jasperreports.engine.util.xml.JaxenXPathExecuterFactory");


我的代码块如下所示

private JasperPrint getJasperPrintInstance(JasperReport report) throws JRException, NamingException, SQLException {
    JasperPrint jasperPrint = null;
    DefaultJasperReportsContext context = DefaultJasperReportsContext.getInstance();
    JRPropertiesUtil.getInstance(context).setProperty("net.sf.jasperreports.xpath.executer.factory",
                                                      "net.sf.jasperreports.engine.util.xml.JaxenXPathExecuterFactory");
    if (dataSource == null) {
        jasperPrint = JasperFillManager.fillReport(report, this.reportParams, connection);
    } else {
        jasperPrint =
            JasperFillManager.fillReport(report, this.reportParams,
                                         new JRBeanCollectionDataSource(getDataSource()));
    }

    return jasperPrint;
}


即使将“ net.sf.jasperreports.engine.util.xml.JaxenXPathExecuterFactory”更改为其他任何内容,也没有任何改变。

您能否让我知道我做错了什么?

最佳答案

发生这种情况是因为您没有使用新创建的context。您需要使用它创建一个JasperFillManager实例:

JasperFillManager jasperFillManager = JasperFillManager.getInstance(context);

并使用其实例方法代替类方法:

jasperPrint = jasperFillManager.fill(report, this.reportParams, connection);

10-07 18:22