2013-04-26 53 views
0

基本上就是我想要做的是这样的:http://www.mkyong.com/java/how-to-export-data-to-csv-file-java/建立CSV动态在JSF 2

除了在结尾成为它作为一个下载到用户。 很明显,我无法使用FileWriter,因为我使用的是JSF,但我尝试了通过从外部上下文获取输出流,然后使用输出流(下面的代码)制作缓冲写入器来做类似的事情。根据我的日志完成执行直到最后,但没有保存为弹出对话框。我使用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()); 
} 

任何建议将帮助很多,一直在努力与此一段时间了。

+1

尝试BalusC的开球示例:http://stackoverflow.com/questions/2914025/forcing-a-save-as-dialogue-from-any-web-browser-from-jsf-application – uzvar 2013-04-26 10:08:49

+0

非常感谢评论,我不能相信我错过了这个问题。无论如何,确切的解决方案没有奏效,但它帮助我朝着正确的方向发展。我不知道如何以某种方式对评论/ +代表进行提名,但是谢谢。只要我被允许,我会尽快回答。 – Vinc 2013-04-26 11:28:49

回答

1

首先感谢uzvar指向我Forcing a save as dialogue from any web browser from JSF application这正是帮助我开展工作的原因。

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

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

其余代码保持不变。

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