4

Excel ファイルを生成し、byte[] として出力する Jasper Report があります。ブラウザでファイルをダウンロードとして表示したいのですが、現時点では生のコードをブラウザに出力するだけです。

コードの関連部分を以下に示します。これは 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

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

Insted of: "Content-disposition", "attachment; filename= \"Export.xls\" "

使用してみてください: "Content-disposition", "attachment; filename= Export.xls "

于 2015-09-01T14:31:45.623 に答える
0

これに似た私の作業コードには、大文字の D があります。

すなわち:Content-Dispositionの代わりにContent-disposition.

これは、RFC2183 で義務付けられている方法でもあります。

于 2012-06-29T12:58:02.967 に答える