【发布时间】:2012-01-18 03:19:28
【问题描述】:
我正在使用 jsf 数组列表根据某些条件检索记录。现在我想通过 Jasper 报告打印这个数组列表的内容。我按照以下步骤操作。
- 在 Jasper 报告中使用了空数据源。
- 在 jasper 报告中创建的字段作为我的 bean 属性的字段。
- 然后我将报告编译为 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