2012-06-21 40 views
1

我的代碼在我的bean類以下塊 -需要一種方法來實例化ZipOutputStream對象內的服務層

HttpServletResponse response = (HttpServletResponse) getFacesContext().getExternalContext().getResponse(); 
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream()); 

從我的豆我打電話給我的服務層,這反過來調用數據庫層,檢索數據並將在ZIP文件中生成的文件寫入服務層。如果沒有生成文件,我有一個問題,我不知道該怎麼做。

當我在我的bean中實例化ZipOutputStream對象時,它創建一個ZIP文件並打開一個「Opening Extracts.zip」窗口,當我點擊OK時,出現錯誤,因爲ZIP文件夾中沒有文件。

somoone請告訴我是否有任何方法可以將zos實例化移至服務層而不必傳遞響應對象?

感謝, Raaz

回答

1

我發現我可以執行以下操作來解決我的問題 -

在我的bean類,我寫了下面的代碼 -

HttpServletResponse response = (HttpServletResponse) getFacesContext().getExternalContext().getResponse(); 
ByteArrayOutputStream outputStream = null; 

try { 
    outputStream = //Call service to generate the extract, return outputStream ; 
    if(outputStream != null){ 
    response.setContentType(T3Constants.MIME_ZIP); 
    response.setHeader(T3Constants.CONTENT_DISPOSITION, ATTACH_FILE_NAME); 
    response.getOutputStream().write(outputStream.toByteArray()); 
    response.flushBuffer(); 
    FacesContext.getCurrentInstance().responseComplete(); 
    outputStream.close(); 
    } else { 
    formatFacesMessage(FacesMessage.SEVERITY_WARN, "No data for selected filter", "No data for selected filter"); 
    } 
} 

在我的服務,我寫了下面的代碼 -

ByteArrayOutputStream outputStream = null; 
if(CollectionUtils.isNotEmpty(list returned from DB)) { 
    outputStream = new ByteArrayOutputStream(); 
    ZipOutputStream zos = new ZipOutputStream(outputStream); 
    //Add files to ZIP 
    outputStream = new ByteArrayOutputStream(); 
    workbook.write(outputStream); 
    zos.putNextEntry(new ZipEntry(xlsName.toString())); 
    zos.write(outputStream.toByteArray()); 
    zos.flush(); 
    zos.close(); 
return outputStream; 
} 

謝謝, Raaz

相關問題