Ich möchte Datei-Download mit Java, Struts2 und Ajax geben.
Auf meiner html-Seite gibt es eine Schaltfläche namens "export", die auf einen Ajax-Aufruf klickt, der eine Abfrage ausführt und eine .xls-Datei mit Code erstellt, und ich möchte diese Datei dem Benutzer zum Download geben, ohne sie zu speichern auf der Festplatte.
Kann jemand das mit struts2 und ajax in Java machen?
Gibt es ein Beispiel?
Lass es mich wissen, wenn du mehr Details von mir brauchst ...
Danke.
amar4kintu
In diesem Fall müssen Sie AJAX nicht verwenden. Übergeben Sie einfach das Formular an Ihre Struts-Aktion und nutzen Sie das Stream-Ergebnis Typ.
Beispiel:
In Ihrem Struts-XML:
%Vor% Ihre Aktion liefert dann ein public InputStream getInputStream()
, um die Daten weiterzuleiten.
Ich nehme an, dass die Bibliothek, die Sie zum Generieren der Excel-Dateien verwenden ( POI ?), die Ausgabe in ein beliebiges% schreiben kann. co_de%.
Eine schnelle Möglichkeit, das in ein OutputStream
zu konvertieren:
Nur zu Ihrer Information, wir können das gleiche tun mit Annotation:
%Vor%Als Folge der Frage von amar4kintu zu Dateien, die als exportReport.action anstelle von report.xls gespeichert wurden, geschieht dies in IE, wenn das folgende Format in Ihrer struts.xml-Datei nicht befolgt wird:
%Vor% Es scheint, als ob die Zeile contentDisposition
insbesondere anzeigen muss, dass die Datei eine Anlage ist und der Dateiname von Anführungszeichen umgeben ist.
Ich würde diese Art von Annotation für die Action-Klasse verwenden:
%Vor%Ein besserer Ansatz zum Pipe-Outstream zu einem Eingangsstrom wird nachstehend erläutert im Gegensatz zu der Antwort von ZoogieZork oben
%Vor%Der Vorteil dieser Methode besteht darin, dass der gesamte Puffer nicht im Speicher gespeichert wird, sondern mit einem kleinen internen Ringpuffer gepiped wird. Dies ist sowohl hinsichtlich des Arbeitsspeichers als auch des CPU-Aufwands besser.
Referenz: Konvertieren Sie einen Java OutputStream in einen InputStream
atlast, ich konnte es wie folgt lösen ..
Ich schrieb folgende Zeile in meiner Action-Class-Funktion und ich konnte Datei mit dem Namen report.xls
anstelle von ExportReport.action
herunterladen. Ich weiß nicht genau ... warum?
Das Folgende ist in meiner struts.xml
-Datei. Ich habe <contentDispositin>
param daraus entfernt, weil es nicht von struts.xml
file funktioniert hat, und ich habe es in meine Action-Java-Datei wie oben eingefügt.
Ich hoffe, das wird jemandem helfen.
Danke.
amar4kintu