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!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage