by Guest » 12 Jan 2025, 12:02
Ich möchte eine Excel-Datei erstellen, wenn der Benutzer auf meiner Webseite auf eine Formularschaltfläche geklickt hat. Meine erste Lösung funktioniert gut. Der Benutzer hat die Schaltfläche gedrückt, der serverseitige Java-Code erstellt die Datei und nachdem der Java-Code ausgeführt wurde, öffnet der Webbrowser einen Dialog, der den Benutzer fragt, ob er die Excel-Datei anzeigen oder speichern möchte.
Aber ich bekomme einige neue Anforderungen von meinem Kunden. Wenn der Benutzer die Formularschaltfläche gedrückt hat, muss ein animiertes GIF-Bild angezeigt werden, während der serverseitige Java-Code ausgeführt wurde, und das animierte GIF muss sofort ausgeblendet werden, wenn der serverseitige Java-Code beendet wurde.
Dies ist der Struts2-Submit-Button, der die HTTP-Anfrage startet, wenn der Button gedrückt wurde:
Dies ist der Client-Code, der die HTTP-Anfrage erstellt und an meine Struts2-Aktionsklasse sendet:
Code: Select all
function myJsFunction(){
$.ajax({
type: "POST",
dataType: 'binary',
url: "myActionClass.action",
data: {//some necessary input values},
success: function(data){
console.log(data);
// js code to disappeared the animated gif image
}
});
}
Dies ist der Java-Code, der den Binärcode erstellt:
Code: Select all
private void returnExcelFileAsStream(final String filename) throws IOException {
final InputStream is = new FileInputStream(filename);
OutputStream os = null;
try {
response.setContentType("application/pdf");
response.setHeader("Cache-Control", "maxage=3600");
response.setHeader("Pragma", "public");
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
os = response.getOutputStream();
int len;
byte buf[] = new byte[1024];
while ((len = is.read(buf)) > 0) {
os.write(buf, 0, len);
}
is.close();
os.close();
}
catch(Exception e){
// some exeception handling
}
}
Dies ist die Struts2-Ausführungsmethode, die die Methode returnExcelFileAsStream aufruft.
Code: Select all
public String execute(){
// some Java code
returnExcelFileAsStream("MyExcelFile.xlsx")
return null;
}
Dies ist meine struts.xml-Datei:
Jetzt besteht das Problem, dass der Webbrowser keinen Benutzerdialog öffnet, der den Benutzer auffordert, die Datei anzuzeigen oder zu speichern. Bei Firebug sehe ich einige kryptische Zeichen in der HTTP-Antwort. Wie kann ich dieses Problem lösen?
Ich möchte eine Excel-Datei erstellen, wenn der Benutzer auf meiner Webseite auf eine Formularschaltfläche geklickt hat. Meine erste Lösung funktioniert gut. Der Benutzer hat die Schaltfläche gedrückt, der serverseitige Java-Code erstellt die Datei und nachdem der Java-Code ausgeführt wurde, öffnet der Webbrowser einen Dialog, der den Benutzer fragt, ob er die Excel-Datei anzeigen oder speichern möchte.
Aber ich bekomme einige neue Anforderungen von meinem Kunden. Wenn der Benutzer die Formularschaltfläche gedrückt hat, muss ein animiertes GIF-Bild angezeigt werden, während der serverseitige Java-Code ausgeführt wurde, und das animierte GIF muss sofort ausgeblendet werden, wenn der serverseitige Java-Code beendet wurde.
Dies ist der Struts2-Submit-Button, der die HTTP-Anfrage startet, wenn der Button gedrückt wurde:
[code]
[/code]
Dies ist der Client-Code, der die HTTP-Anfrage erstellt und an meine Struts2-Aktionsklasse sendet:
[code]function myJsFunction(){
$.ajax({
type: "POST",
dataType: 'binary',
url: "myActionClass.action",
data: {//some necessary input values},
success: function(data){
console.log(data);
// js code to disappeared the animated gif image
}
});
}
[/code]
Dies ist der Java-Code, der den Binärcode erstellt:
[code]private void returnExcelFileAsStream(final String filename) throws IOException {
final InputStream is = new FileInputStream(filename);
OutputStream os = null;
try {
response.setContentType("application/pdf");
response.setHeader("Cache-Control", "maxage=3600");
response.setHeader("Pragma", "public");
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
os = response.getOutputStream();
int len;
byte buf[] = new byte[1024];
while ((len = is.read(buf)) > 0) {
os.write(buf, 0, len);
}
is.close();
os.close();
}
catch(Exception e){
// some exeception handling
}
}
[/code]
Dies ist die Struts2-Ausführungsmethode, die die Methode returnExcelFileAsStream aufruft.
[code]public String execute(){
// some Java code
returnExcelFileAsStream("MyExcelFile.xlsx")
return null;
}
[/code]
Dies ist meine struts.xml-Datei:
[code]
/WEB-INF/base/jsp/myJspPage.jsp
[/code]
Jetzt besteht das Problem, dass der Webbrowser keinen Benutzerdialog öffnet, der den Benutzer auffordert, die Datei anzuzeigen oder zu speichern. Bei Firebug sehe ich einige kryptische Zeichen in der HTTP-Antwort. Wie kann ich dieses Problem lösen?