javax.el.ELException: java.lang.NoClassDefFoundError: jxl/read/biff/BiffException

В приложении JSF 2.x я использую PrimeFaces V-3.5 и JasperReports V-5.2. Я пытаюсь экспортировать некоторые отчеты с помощью JasperReports. Я могу экспортировать отчет в формате PDF и RTF; однако формат Excel не работает, и возникает следующая ошибка:

javax.el.ELException: java.lang.NoClassDefFoundError: jxl/read/biff/BiffException

Вот мой метод генератора отчетов:

private void prepareReport(String reportPath, @SuppressWarnings("rawtypes") List beanList, String outputFormat, String reportName) {
    JasperReport jReport = null;
    JasperPrint jPrint = null;
    try {
        jReport = JasperCompileManager.compileReport(reportPath);
        jPrint = JasperFillManager.fillReport(jReport, jasperParameter, new JRBeanCollectionDataSource(beanList));
    } catch (JRException e) {
        e.printStackTrace();
    }

    FacesContext ctx = FacesContext.getCurrentInstance();
    HttpServletResponse response = (HttpServletResponse) ctx.getExternalContext().getResponse();
    OutputStream outputStream = null;

    try {
        outputStream = response.getOutputStream();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        if (outputFormat.equals(OUTPUT_FORMAT_PDF)) {
            response.setContentType("application/pdf");
            response.setHeader("Content-disposition", "attachment; filename=" + reportName + ".pdf");
            JasperExportManager.exportReportToPdfStream(jPrint, outputStream);

        } else if (outputFormat.equals(OUTPUT_FORMAT_EXCEL)) {
            response.setContentType("application/xls");
            response.setHeader("Content-disposition", "attachment; filename=" + reportName + ".xls");
            JExcelApiExporter exporter = new JExcelApiExporter();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, jPrint);
            exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
            exporter.exportReport();

        } else if (outputFormat.equals(OUTPUT_FORMAT_RTF)) {
            response.setContentType("application/rtf");
            response.setHeader("Content-disposition", "attachment; filename=" + reportName + ".rtf");
            JRRtfExporter exporter = new JRRtfExporter();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, jPrint);
            exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
            exporter.exportReport();
        }
    } catch (JRException e) {
        e.printStackTrace();
    }

    try {
        outputStream.flush();
        outputStream.close();
        FacesContext.getCurrentInstance().responseComplete();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Как я могу экспортировать отчет в формате Excel?


person nudastack    schedule 25.10.2013    source источник
comment
Вы должны опубликовать полную трассировку стека   -  person Alex K    schedule 25.10.2013
comment
Вы добавили jxl-2.6.10.jar в путь к классам? Вам нужен этот артефакт: net.sourceforge.jexcelapi.jxl:2.6.10 для JasperReports 5.2   -  person Alex K    schedule 25.10.2013
comment
Я только что добавил файл jxl-2.6.10.jar, и он работает. Заранее спасибо. Сделайте это как ответ, чтобы я мог проголосовать за вас.   -  person nudastack    schedule 25.10.2013


Ответы (1)


Вы используете JExcelApiExporter< /а>. Он использует библиотеку JExcelApi.

Вы можете проверить зависимость в файле pom.xml JasperReports. JasperReports 5.2 использует этот артефакт:

<dependency>
    <groupId>net.sourceforge.jexcelapi</groupId>
    <artifactId>jxl</artifactId>
    <version>2.6.10</version>
</dependency>

Это означает, что вы должны добавить jxl-2.6.10.jar в путь к классам вашего приложения (в случае использования JasperReports 5.2).

person Alex K    schedule 25.10.2013