Im Frühling MVC wie übergebe ich ein Objekt zwischen zwei Controller-Methoden? Ich habe ein Update-Formular und einen updateController. In der Steuerung habe ich 2 Methoden, eine zum Abrufen der Daten und zum Anzeigen in einer Ansicht. Die zweite Methode des Controllers wird aufgerufen, wenn der Benutzer auf die Schaltfläche "Aktualisieren" mit den geänderten Änderungen klickt. Was ich beobachte, ist, dass das Objekt, das ich in der zweiten Methode des Controllers erhalte, nicht dasselbe Objekt ist, das ich an die Ansicht im ersten Controller-Methodenaufruf übergeben habe. Es ist ein neues Objekt mit allen zugeordneten Formularfeldern. Wie stelle ich sicher, dass das gleiche Objekt an die zweite Controller-Methode übergeben wird, die der View von der ersten Controller-Methode zur Verfügung gestellt wurde?
%Vor%Die obige Controller-Methode ruft die emp-Werte von Db ab und zeigt sie in der Ansicht korrekt an. Jetzt ändert der Benutzer einige Details und klickt auf Senden. Die folgende Controller-Methode wird aufgerufen.
%Vor%In der obigen Controller-Methode, wenn ich das emp-Objekt überprüfe, ist es nicht das gleiche Objekt, das ich beim vorherigen Controller-Aufruf übergeben habe. Die Felder, die nicht unterstützt werden, aber Werte haben, wurden in null geändert. Wie kann ich sicherstellen, dass das gleiche Objekt von der Ansicht übergeben wird? Ich möchte das Objekt nicht als sessionAttribute hinzufügen, da ein Benutzer möglicherweise viele Mitarbeiter in einer Sitzung ändern kann.
Sie haben 3 Optionen
@SessionAttributes
, um das Objekt in der Sitzung zwischen Anfragen zu speichern. @ModelAttribute
annotierte Methode, um das Objekt vor jeder Anfrage abzurufen @SessionAttributes
Annotation zu Ihrer Controller-Klasse hinzu SessionStatus
und der Methode setComplete()
eine Methode hinzu, wenn Sie mit dem Objekt @ModelAttribute
showEmpDetails
, da sie nur einen Ansichtsnamen HttpSession
als Argument hinzu showDetails
-Methode neben dem Hinzufügen zum Modell der Sitzung hinzu editEmpFormSubmission
die aus der Sitzung und kopieren Sie alle Nicht-Null-Felder in das Objekt aus der Sitzung und speichern Sie diese in der Datenbank. Ich würde mich nicht für eine Option entscheiden, ich würde Option 1 empfehlen, insbesondere die setComplete()
auf dem Objekt SessionStatus
für die Bereinigung. Sie könnten auch 1 und 2 kombinieren (verwenden Sie eine @ModelAttribute
annotierte Methode und verwenden Sie weiterhin @SessionAttributes
.).
Wie kann ich sicherstellen, dass das gleiche Objekt an der Ansicht übergeben wird? Ich möchte das Objekt nicht als sessionAttribute hinzufügen, da ein Benutzer möglicherweise viele Mitarbeiter in einer Sitzung ändert
Sie können ein Feld in dem Objekt erstellen, das zum Zeitpunkt des anfänglichen Renderns mit einer Zufallszahl gefüllt ist, und dieses Objekt dann in der Sitzung speichern. In der Ansicht können Sie dieses Feld mit einer versteckten Eingabe abbilden, und jetzt, wenn der Benutzer eine Aktion zum Bearbeiten der Aktion sendet, können Sie das versteckte Feld abrufen und das ursprüngliche Objekt aus der Sitzung mit der Nummer im versteckten Feld abrufen. Das würde die Mehrfachbearbeitung in verschiedenen Tabs lösen.
Tags und Links java spring spring-mvc