Paul Calhoun向我發送了一些示例代碼,讓我按照它來生成我想要的電子表格。我不知道他做了什麼,我沒有,但現在,我認爲這是解決方案的核心,只是利用OutputStream而不是FileOutputStream或ByteArrayOutputStream。
// The Faces Context global object provides access to the servlet environment via the external content
var extCont = facesContext.getExternalContext();
// The servlet's response object provides control to the response object
var pageResponse = extCont.getResponse();
//Get the output stream to stream binary data
var pageOutput = pageResponse.getOutputStream();
// Set the content type and headers
pageResponse.setContentType("application/x-ms-excel");
pageResponse.setHeader("Cache-Control", "no-cache");
pageResponse.setHeader("Content-Disposition","inline; filename=" + fileName);
//Write the output, flush the buffer and close the stream
wb.write(pageOutput);
pageOutput.flush();
pageOutput.close();
// Terminate the request processing lifecycle.
facesContext.responseComplete();
我會很樂意提供幫助,如果別人遇到這個問題,並希望由別人問的時候,我就明白了更多的什麼不同的是工作....
每是正確的。查看OpenNTF上的XSnippets中的XAgent代碼片段。它提供輸出流。因此,而不是創建自己的流將其作爲參數傳遞給您的方法。內容處置標題然後可以確定文件名稱。請記住用戶需要確認保存。還可以看看Apache POI以獲得更高級的Excel輸出功能 – stwissel 2012-08-02 00:20:24
感謝Per會檢查出來。 @stwissel我正在使用Apache POI,但我是一名真正的業餘愛好者,剛剛採用了Russ Maher的實施並稍加擴展。 – 2012-08-02 13:43:47