Wie implementiere ich einen Fortschrittsbalken mit Spring 3 MVC?

9

Kann mir jemand beibringen oder mich an ein funktionierendes Beispiel wenden, um diese Anforderung zu erfüllen.

Szenario:

  1. Listenelement Meine Webanwendung verwendet spring mvc.
  2. Einer der angebotenen Dienste ist, dass, wenn der Benutzer auf eine Schaltfläche klickt, ein lang andauernder Prozess auf dem Server stattfinden wird. (Datenbank abfragen, Dateien schreiben, Protokolle schreiben, usw.) Dieser Vorgang kann ein paar Sekunden oder ein paar Minuten dauern.
  3. * Problem * * * Wie kann ich den Service implementieren, um den Client über seinen Fortschritt zu informieren?

  4. Der Service gibt wahr oder falsch zurück, wenn der Prozess erfolgreich war.

Danke für Ihre Antworten. Ein Code-Snippet oder ein vollständiges Tutorial wird sehr hilfreich sein.

    
Jefrey Valencia 13.02.2012, 01:06
quelle

2 Antworten

2

Es gibt eine Reihe von Möglichkeiten, ein Szenario wie dieses zu behandeln. Eine Möglichkeit besteht darin, die Arbeit in Form eines "Prozesses" zu modellieren, der einen "Status" enthält, einschließlich einer prozentualen Fertigstellung.

Wenn Sie sich vorstellen, wie dies auf einer Website aussehen könnte, klicken Sie auf die Schaltfläche, um den Prozess zu starten. Sie senden ein Formular, das den Prozess startet und dem Prozess eine Art Identität zuweist, fast so, als würden Sie eine andere erstellen Objekt. Es würde Sie dann auf eine Seite "Prozessstatus" umleiten.

Die Prozessstatusseite fragt nach dem Status des Prozesses und zeigt ihn an. Es hätte wahrscheinlich einen URL-Parameter für die Prozess-ID. Es würde sich vielleicht selbst aktualisieren, indem es einen AJAX-Aufruf verwendet, um einen Fortschrittsprozentsatz zurückzugeben.

Im Backend müssen Sie jetzt ein paar Probleme lösen: den aktuellen Status von Prozess N herausfinden und den Status von Prozess N aktualisieren. Sie können dies auf verschiedene Arten erreichen, einschließlich des Speicherns des Fortschritts in der Datenbank oder mit einer Art In-Memory-Tabelle von laufenden Jobs. Sie können auch eine Art Heuristik verwenden, um einen Prozentsatz zu schätzen. Wenn es sich zum Beispiel um einen "Neuen Benutzer registrieren" -Arbeit handelt, ist es vielleicht 20%, wenn die Tabelle des Benutzers eine E-Mail-Adresse hat, 40%, wenn die Benutzer-Avatartabelle Daten für diesen Benutzer enthält, usw. Ich empfehle nicht so viel.

    
Brandon Yarbrough 20.02.2012, 22:28
quelle
2

Hier ist eine mögliche Lösung für dieses Fortschrittsbalkenproblem:

task.jsp

%Vor%

TaskController.java

%Vor%

Task.java

%Vor%     
zygimantus 06.12.2016 18:54
quelle

Tags und Links