2012-06-29 54 views
3

我有一個生成Excel文件並以字節[]形式輸出的Jasper報告,我希望該文件在瀏覽器中顯示爲下載內容,但此刻它只是打印原始代碼到瀏覽器。設置字節[]作爲文件下載

代碼的相關部分低於,這是從一個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(); 
    } 

任何想法,我要去的地方錯了嗎?與此類似

回答

1

看來您無法從AJAX請求下載文件,所以我使用h:commandButton來觸發下載。

0

我的工作代碼中有一個大寫字母D.

即:Content-Disposition代替Content-disposition

這也是如何RFC2183的任務。

+0

感謝您的建議Stefano,我試過了,但它仍然只是在網頁上顯示原始代碼 – DaveB

0

嘗試使用a4j:htmlCommandLink來觸發下載請求並在標記中給出target="_NEW"

0

爲Excel文件內容類型是:

爲BIFF .xls文件:應用/ vnd.ms-的excel

爲Excel2007中和上述的.xlsx文件:應用/ VND。 openxmlformats-officedocument.spreadsheetml.sheet

insted的的: 「內容處置」,「附件;文件名= \「Export.xls \」

嘗試使用: 」Content-disposition「,」attachment;文件名= Export.xls