【问题标题】:Printing jsf ArrayLIst via Jasper Report using JRBeanCollectionDataSource使用 JRBeanCollectionDataSource 通过 Jasper Report 打印 jsf ArrayLIst
【发布时间】:2012-01-18 03:19:28
【问题描述】:

我正在使用 jsf 数组列表根据某些条件检索记录。现在我想通过 Jasper 报告打印这个数组列表的内容。我按照以下步骤操作。

  1. 在 Jasper 报告中使用了空数据源。
  2. 在 jasper 报告中创建的字段作为我的 bean 属性的字段。
  3. 然后我将报告编译为 employeeList.jasper 并将其放入我的 /reports jsf 项目中的 /employeeReports/employeeList.jasper 文件夹(我使用的是 Eclipse)。

然后我使用以下代码来填充和显示 pdf 报告

JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(this.srchdEmployeesList);
try {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    HttpServletResponse response =
            (HttpServletResponse) facesContext.getExternalContext().getResponse();
    HashMap parameterMap = new HashMap();
    JasperFillManager.fillReportToFile("/reports/employeeReports/employeeList.jasper", parameterMap, dataSource);
    InputStream reportStream = facesContext.getExternalContext().getResourceAsStream("/reports/employessReports/employeeList.jasper");
    ServletOutputStream servletOutputStream = response.getOutputStream();
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Session hibernateSession = null;
    hibernateSession = HibernateUtils.currentSession();
    connection = hibernateSession.connection();
    facesContext.responseComplete();
    response.setContentType("application/pdf");
    response.setHeader("Content-disposition", "attachment;");
    JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parameterMap, connection);

    connection.close();
    servletOutputStream.flush();
    servletOutputStream.close();
} catch (Exception e) {
    e.printStackTrace();
}

我收到以下错误消息并且报告不显示

  net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: \reports
  \employeeReports\employeeList.jasper
Caused by: java.io.FileNotFoundException: \reports\employeeReports
   \employeeList.jasper ... 34 more

在这方面的帮助将不胜感激。提前致谢。

【问题讨论】:

  • 您使用的是什么版本的 JasperReports API?您应该更好地阅读 JasperFillManager.fillReportToFile 方法的 javadoc:jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/…
  • 谢谢亚历克斯。我想知道,我的代码在逻辑上是否有问题。无论如何,我正在使用 JasperReports 4.1.1。
  • 我阅读了 javadoc,它说 fillReportToFile(java.lang.String sourceFileName,java.lang.String destFileName...) 我确实使用了这样的第二个参数...JasperFillManager.fillReportToFile("/报告/employeeReports/employeeList.jasper","/reports/employeeReports/employeeList.jasper",parameterMap, dataSource),但我得到完全相同的错误。
  • 您是否在 java 代码的帮助下检查了文件是否存在?可能是文件位置(文件路径)的问题
  • 亚历克斯。我已经编译了 jasper 文件及其在 Web Content/reports/employeeReports/employeeList 中。它在那里。那么为什么会抛出错误。

标签: jsf jasper-reports


【解决方案1】:

您写道,该报告位于“Web Content/reports/employeeReports/employeeList”中。但是您的代码似乎没有指向那里。您的代码指向“/reports/employeeReports/employeeList.jasper”。

是否像使用相对路径一样简单?
“reports/employeeReports/employeeList.jasper”或“./reports/employeeReports/employeeList.jasper”

【讨论】:

  • 我使用了“/reports/employeeReports/employeeList.jasper”、“./reports/employeeReports/employeeList.jasper”、“../reports/employeeReports/employeeList.jasper”、“reports/employeeReports” /employeeList.jasper" 但它给出了相同的 net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
相关资源
最近更新 更多