java - 在 JSF 2 中动态构建 CSV

标签 java csv jsf-2 richfaces myfaces

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

除非最后将其作为下载提供给用户。 显然,我不能使用 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());
}

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

最佳答案

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

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

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

其余代码保持不变。

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

关于java - 在 JSF 2 中动态构建 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16233605/

相关文章:

python - Pandas 读取 csv 替换#DIV/0!和#VALUE!与南

PHP - 将表数据下载到 CSV 的最快方法 - 大数据

jsf-2 - 在转换器中将 JSF 日历日期转换为 JodaTime

javascript 无法隐藏 <h :form> 内的按钮

java - 将带有 html/Javascript 的字符串放入 selenium webdriver

java - 预购打印带缩进的二叉树

java - 同一 xpath 值出现在网格的不同行上

java - "cannot find symbol method drawImage(java.awt.image.BufferedImage,<nulltype>,int,int)"

csv - 将 Google NGram 结果另存为 .csv

css - 根据属性数据库 jsf2 primefaces 更改外观数据表