4

我有一个 Jasper 报告,它生成一个 Excel 文件并输出为一个字节 [],我希望该文件在浏览器中显示为下载,但目前它只是将原始代码打印到浏览器。

代码的相关部分如下,这是从 AJAX 请求发起的(页面已经加载):

    JasperReport jasperReport;
    JasperPrint jasperPrint;
    HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();    

    byte[] excel = null;
    FacesContext facesContext = FacesContext.getCurrentInstance();

    try {
        ArrayList<SwimDataReport> dataList = getData();
        if(dataList!=null){
            JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(dataList, false);

            jasperReport = JasperCompileManager.compileReport(reportFile.getPath());
            jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);
            JRXlsExporter exporter = new JRXlsExporter();
            ByteArrayOutputStream  xlsReport = new ByteArrayOutputStream();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
            exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, xlsReport);            
            exporter.exportReport();
            excel = xlsReport.toByteArray();

            response.reset();
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-disposition", "attachment; filename=\"Export.xls\"");

            xlsReport.close();

            OutputStream  ouputStream = response.getOutputStream();
            ouputStream.write(excel);
            ouputStream.close();

            facesContext.responseComplete();
            this.cleanUp();
        }else{
            return;
        }
    } catch (JRException e) {       
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }

有什么想法我哪里出错了吗?

4

4 回答 4

1

看来您无法从 AJAX 请求下载文件,因此我使用 h:commandButton 来触发下载。

于 2012-06-29T15:16:00.657 回答
0

我与此类似的工作代码有一个大写的 D。

即:Content-Disposition而不是Content-disposition.

这也是RFC2183 的要求。

于 2012-06-29T12:58:02.967 回答
0

尝试使用a4j:htmlCommandLink来触发下载请求并提供target="_NEW"标签。

于 2012-07-03T11:35:32.377 回答
0

Excel 文件的内容类型为:

对于 BIFF .xls 文件:application/vnd.ms-excel

Excel2007及以上.xlsx文件:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

安装:“内容处置”,“附件;文件名= \”Export.xls\“

尝试使用:“Content-disposition”、“attachment; filename= Export.xls

于 2015-09-01T14:31:45.623 回答