【问题标题】:Build CSV dynamically in JSF 2在 JSF 2 中动态构建 CSV
【发布时间】:2013-04-20 11:03:13
【问题描述】:

基本上我想做的是: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());
}

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

【问题讨论】:

  • 试试 BalusC 的启动示例:stackoverflow.com/questions/2914025/…
  • 非常感谢您的评论,真不敢相信我错过了这个问题。无论如何,确切的解决方案没有奏效,但它帮助我朝着正确的方向前进。我不知道如何为评论投票/+以某种方式代表,但谢谢。一旦我被允许,我会发布我所做的作为答案。

标签: java csv jsf-2 richfaces myfaces


【解决方案1】:

首先感谢 uzvar 将我指向 Forcing a save as dialogue from any web browser from JSF application 这帮助我开始工作。

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

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

其余代码保持不变。

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

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 2012-10-03
    • 2021-03-31
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2012-03-15
    相关资源
    最近更新 更多