0

基本上我想做的是:http ://www.mkyong.com/java/how-to-export-data-to-csv-file-java/

除了最后将其作为下载提供给用户。显然我不能在使用 JSF 时使用 FileWriter,但我尝试通过从外部上下文获取输出流然后使用输出流(下面的代码)制作缓冲写入器来做类似的事情。根据我的日志,这确实完全执行到最后,但不会弹出另存为对话框。我正在使用 JSF 2(MyFaces) 和 RichFaces 4.3,如果有更好的方法可以使用组件执行此操作,请告诉我。

externalContext.responseReset();
externalContext.setResponseHeader("Content-Disposition", "attachment; filename=test.csv");
externalContext.setResponseContentType("text/csv");

try {
    OutputStream csvOut = externalContext.getResponseOutputStream();    
    BufferedWriter csvWriter = new BufferedWriter(new OutputStreamWriter(csvOut, "UTF-8"));

    csvWriter.append("data,data,data,data");

    csvWriter.flush();
    csvWriter.close();
    csvOut.close();

    facesContext.responseComplete();
}catch(Exception ex){
    System.out.println(ex.toString());
}

任何建议都会有很大帮助,现在已经为此苦苦挣扎了一段时间。

4

1 回答 1

1

首先感谢 uzvar 将我指向从 JSF 应用程序的任何 Web 浏览器强制保存为对话这帮助我开始工作。

基本上我所做的只是用 externalContext.getResponseOutputStream(); 声明了一个 BufferedOutputStream 而不是一个 OutputStream;作为参数。所以它看起来像:

BufferedOutputStream csvOut = new BufferedOutputStream(externalContext.getResponseOutputStream());  

其余代码保持不变。

如果有更好的方法可以做到这一点,请发表答案/评论。

于 2013-04-26T11:32:08.070 回答