Java 在JSF2中动态构建CSV

Java 在JSF2中动态构建CSV,java,csv,jsf-2,richfaces,myfaces,Java,Csv,Jsf 2,Richfaces,Myfaces,基本上我想做的是: 除了在最后作为下载给用户。 显然,我不能像使用JSF那样使用FileWriter,但我尝试过做一些类似的事情,从外部上下文获取输出流,然后使用输出流(下面的代码)创建一个缓冲编写器。根据我的日志,这会完全执行到最后,但不会弹出另存为对话框。我使用的是JSF 2(MyFaces)和RichFaces 4.3,如果有更好的方法使用组件来实现这一点,请告诉我 externalContext.responseReset(); setResponseHeader(“内容处置”、“附件;

基本上我想做的是:

除了在最后作为下载给用户。 显然,我不能像使用JSF那样使用FileWriter,但我尝试过做一些类似的事情,从外部上下文获取输出流,然后使用输出流(下面的代码)创建一个缓冲编写器。根据我的日志,这会完全执行到最后,但不会弹出另存为对话框。我使用的是JSF 2(MyFaces)和RichFaces 4.3,如果有更好的方法使用组件来实现这一点,请告诉我

externalContext.responseReset();
setResponseHeader(“内容处置”、“附件;文件名=test.csv”);
setResponseContentType(“text/csv”);
试一试{
OutputStream csvOut=externalContext.getResponseOutputStream();
BufferedWriter csvWriter=新的BufferedWriter(新的OutputStreamWriter(csvOut,“UTF-8”);
附加(“数据,数据,数据,数据”);
csvWriter.flush();
csvWriter.close();
csvOut.close();
facesContext.responseComplete();
}捕获(例外情况除外){
System.out.println(例如toString());
}

任何建议都会有很大帮助,我已经为此奋斗了一段时间。

首先感谢uzvar向我指出,这正是帮助我工作的原因

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

BufferedOutputStream csvOut=new BufferedOutputStream(externalContext.getResponseOutputStream());
代码的其余部分保持不变


如果有更好的方法,请发布答案/评论。

试试巴卢斯克的开场白示例:非常感谢你的评论,我不敢相信我错过了这个问题。无论如何,确切的解决方案不起作用,但它帮助我朝着正确的方向前进。我不知道如何在某种程度上提高评论/+代表的投票率,但是谢谢。我会尽快把我所做的作为答案发布。