使用JSF下载CSV文件
我不知道如何下载CSV文件。 CSV将在运行时生成。 我是否需要先将文件保存在tomcat WEB-INF目录中? 我正在使用JSF 1.2。
顺便说一下,这种任务最受欢迎的JSF组件是什么?
编辑(05.05.2012 – 15:53)
我尝试了BalusC
在他的第一个链接中说明的解决方案,但如果我点击我的commandButton,该文件的内容将显示在网页上。 也许mimetype
存在问题?
XHTML文件:
主豆:
public String doDataExport() { try { export.downloadFile(); } catch (SurveyException e) { hasErrors = true; } return ""; }
出口豆类:
public void downloadFile() throws SurveyException { try { String filename = "analysis.csv"; FacesContext fc = FacesContext.getCurrentInstance(); HttpServletResponse response = (HttpServletResponse) fc.getExternalContext().getResponse(); response.reset(); response.setContentType("text/comma-separated-values"); response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\""); OutputStream output = response.getOutputStream(); // writing just sample data List strings = new ArrayList(); strings.add("filename" + ";" + "description" + "\n"); strings.add(filename + ";" + "this is just a test" + "\n"); for (String s : strings) { output.write(s.getBytes()); } output.flush(); output.close(); fc.responseComplete(); } catch (IOException e) { throw new SurveyException("an error occurred"); } }
编辑(05.05.2012 – 16:27)
我解决了我的问题。 我必须使用而不是
,现在它可以工作了!
我是否需要先将文件保存在tomcat WEB-INF目录中?
不,只需在通过ExternalContext#getResponseOutputStream()
后直接将其写入HTTP响应主体,然后设置正确的响应标头,告诉浏览器它将检索什么。
根据以下答案中的具体示例进行数学计算:
- 如何从JSF支持bean提供文件下载?
- JSP生成Excel电子表格(XLS)下载
基本上:
List> csv = createItSomehow(); writeCsv(csv, ';', ec.getResponseOutputStream());
顺便说一下,这类任务最喜欢的jsf组件是什么?
这是主观的。 但无论如何,我们正在使用
来完全满意。
如果您使用的是JSF 2,则可以使用primefaces。
你可以看看那个链接 。
如果没有,你可以这样做:
List