Problem
Sie wollen eine Datei zum Download anbieten.
Lösung
Mit p:fileDownload kann man einen beliebigen (File)InputStream herunterladen.
SVN
Sie können das fertige Projekt per SVN von http://xpert-ivy-hacker-source-code.googlecode.com/svn/trunk/Forms in den Xpert.ivy Designer importieren.
Code
Die Demo File Download Demo zeigt wie man eine Datei herunterladen kann.
Um einen Download zu initialisieren benötigt man einen p:commandButton (oder p:commandLink) und ein p:fileDownload.
Code-Snippet 1: Code für File Download
Wichtig beim p:commandButton ist, dass das ajax Attribut auf false gesetzt ist. Grund dafür ist, dass man Files nicht per AJAX herunterladen kann.
Das value Attribut von p:fileDownload zeigt auf ein StreamedContent Objekt. Das ist das Objekt bzw. das File das man herunterladen will.
Code-Snippet 2: StreamedContent Objekt erstellt
In der Logic erstellen wir ein DefaultStreamedContent Objekt, welches das File an den Browser sendet.
Wichtig ist auch, dass der FileInputStream nicht per close() geschlossen wird. Dies hätte zur Folge, dass der Download fehlschlägt.
Das schliessen macht das DefaultStreamedContent automatisch nachdem der Download abgeschlossen ist.
Wichtig beim p:commandButton ist, dass das ajax Attribut auf false gesetzt ist. Grund dafür ist, dass man Files nicht per AJAX herunterladen kann.
Das value Attribut von p:fileDownload zeigt auf ein StreamedContent Objekt. Das ist das Objekt bzw. das File das man herunterladen will.
Code-Snippet 2: StreamedContent Objekt erstellt
In der Logic erstellen wir ein DefaultStreamedContent Objekt, welches das File an den Browser sendet.
Wichtig ist auch, dass der FileInputStream nicht per close() geschlossen wird. Dies hätte zur Folge, dass der Download fehlschlägt.
Das schliessen macht das DefaultStreamedContent automatisch nachdem der Download abgeschlossen ist.
Weiterführende Ressourcen
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter
Keine Kommentare:
Kommentar veröffentlichen
Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.