Herunterladen einer CSV-Datei mit JSF
Ich kann keine CSV-Datei herunterladen. Die CSV wird zur Laufzeit generiert. Muss ich die Datei zuerst im tomcat WEB-INF-Verzeichnis speichern? Ich benutze JSF 1.2.
Übrigens, was ist die bevorzugte JSF-Komponente für diese Art von Aufgabe?
Bearbeiten (05.05.2012 - 15:53)
Ich habe die Lösung ausprobiertBalusC
in seinem ersten angegebenVerknüpfung, aber wenn ich auf meinen CommandButton klicke, wird der Inhalt der Datei auf der Webseite angezeigt. Vielleicht gibt es ein Problem mit demmimetype
?
xhtml-Datei:
<code><a4j:form> <a4j:commandButton action="#{surveyEvaluationBean.doDataExport}" value="#{msg.srvExportButton}" /> </a4j:form> </code>
Hauptbohne:
<code> public String doDataExport() { try { export.downloadFile(); } catch (SurveyException e) { hasErrors = true; } return ""; } </code>
Export-Bohne:
<code>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<String> strings = new ArrayList<String>(); 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"); } } </code>
Bearbeiten (05.05.2012 - 16:27)
Ich habe mein Problem gelöst. Ich muss benutzen<h:commandButton>
anstatt<a4j:commandButton>
und jetzt klappt es!