Idee : Ich habe eine Spring-Web-MVC-Aktion, die eine oder beide dieser Aufgaben erfüllen soll:
Problem : Der Frühling ist nicht in der Lage, eine Datei und leiten im Fall eines Problems zum Download - irgendwie blinken Attribute funktionieren nicht, weil das in der Umleitung verloren gehen:
%Vor%JSP-Seite von / Adressen:
%Vor%Frage : Wie kann ich die Fehlermeldung (einfache Zeichenfolge zum Beispiel) auf der Seite / addresses anzeigen? Arbeiten mit verschiedenen URL-Parameter (error = Fehlera, error = errorb ...) ist ein großer Schmerz, wenn es mehrere Fehlertypen und das Bestehen der Fehlermeldung sind als GET-Parameter sieht unprofessionell und ist die Wurzel der Codierung Probleme.
Ich kann nicht erklären, warum es keine Datei vom Server herunterlädt, sondern zu Ihrer zweiten Abfrage kommt. Sie können auf zwei Arten umleiten, indem Sie entweder den Rückgabetyp Ihrer Methode als ModelAndView verwenden und das tun
%Vor%dann zurück mav. So können Sie die Anzahl der gewünschten Seiten umleiten, falls dies der Fall ist.
und zweiten Ansatz können Sie Ihre Methode Rückgabetyp String nehmen und Sie können direkt auf Ihre erforderlichen jsp umleiten.
Update: Ich dachte, die Frage beträfe Situationen, in denen RedirectAttributes
nicht verfügbar sind, weil die Lösung sonst ziemlich offensichtlich ist (benutze RedirectAttributes
).
Ursprüngliche Antwort:
Ich verwende den folgenden Code, um Nachrichten an die Flash-Map in Situationen zu binden, in denen Spring RedirectAttributes
nicht unterstützt (z. B. in ExceptionHandler
Methoden):
Dabei ist Feedback
/ FeedbackContainer
ein Container für Nachrichten, auf die dann in JPS über JSON-Serialisierung zugegriffen wird. In Ihrem Fall können Sie eine einfache Zeichenfolge mit dem Schlüssel "error" verwenden und direkt auf die JSP zugreifen:
Der Hauptgrund für die Verwendung meines eigenen Nachrichtencontainers ist die Möglichkeit, mehrere Nachrichten mit verschiedenen Ebenen und zusätzlichen getInstance
-Methoden für RedirectAttributes
, Model
oder ModelMap
zu haben, also muss ich mich nicht darum kümmern doppelte Feedback-Bindungen und / oder der unterschiedliche Bindungscode.
Ich würde den folgenden Ansatz vorschlagen: Da Sie eine Remote-Datei als Eingabestream haben, können Sie sie nicht an dem Punkt lesen, an dem eine Ausnahme aufgetreten ist. Daher können Sie die Fehlerwahrscheinlichkeit verringern, indem Sie zuerst die Datei in einen temporären Ordner auf dem lokalen Host herunterladen.
Wenn hier ein Fehler auftritt, können Sie entweder wie vorgeschlagen umleiten oder nach mehreren fehlgeschlagenen Versuchen einen weiteren Versuch durchführen und umleiten. Auf diese Weise schreiben Sie nichts in den Stream, bis Sie sicher sind, dass die Datei erfolgreich heruntergeladen wurde.
Sobald die Datei auf den Server heruntergeladen wurde, können Sie sie an den Client übergeben. Zum Beispiel können Sie Bytes lesen und die aktuelle Position speichern. Angenommen, es gibt eine Ausnahme während des Schreibens in den Stream. Sie können Schreiben von fehlgeschlagenen Punktlesungen aus der Mitte wiederherstellen.
Ein kleines Beispiel
%Vor% safeWrite
sollte das Lesen von lokalen Dateien beim Lesen aus der Dateimitte unterstützen. Es sollte Standard-Java API für solche Operationen geben.
Tags und Links java redirect spring-mvc download spring-web