Nach meinem bisherigen Verständnis können wir bei unserer Controller-Anforderungszuordnungsmethode den Parameter RedirectAttributes angeben und ihn mit Attributen füllen, wenn die Anforderung umgeleitet wird.
Beispiel :
@RequestMapping(value="/hello", method=GET)
public String hello(RedirectAttributes redirAttr)
{
// should I use redirAttr.addAttribute() or redirAttr.addFlashAttribute() here ?
// ...
return "redirect:/somewhere";
}
Die Umleitungsattribute sind dann auf der Zielseite verfügbar, auf die sie umleiten.
Die RedirectAttributes- Klasse verfügt jedoch über zwei Methoden:
Ich habe die Spring-Dokumentation schon eine Weile gelesen, aber ich bin ein bisschen verloren. Was ist der grundlegende Unterschied zwischen diesen beiden und wie soll ich mich für einen entscheiden?
quelle
Angenommen, Sie haben 2 Controller. Wenn Sie von einem Controller zu einem anderen Controller umleiten, sind die Werte im Modellobjekt im anderen Controller nicht verfügbar. Wenn Sie also die Modellobjektwerte freigeben möchten, müssen Sie dies im ersten Controller angeben
addFlashAttribute("modelkey", "modelvalue");
Das Modell des zweiten Controllers enthält nun das obige Schlüsselwertpaar.
Zweite Frage ? Was ist der Unterschied zwischen
addAttribute
undaddFlashAttribute
in derRedirectAttributes
Klasse ?addAttribute
Übergibt die Werte als Anforderungsparameter anstelle des Modells. Wenn Sie also einige mit hinzufügen, könnenaddAttribute
Sie über auf diese Werte zugreifenrequest.getParameter
Hier ist der Code. Ich habe verwendet, um herauszufinden, was los ist:
@RequestMapping(value = "/rm1", method = RequestMethod.POST) public String rm1(Model model,RedirectAttributes rm) { System.out.println("Entered rm1 method "); rm.addFlashAttribute("modelkey", "modelvalue"); rm.addAttribute("nonflash", "nonflashvalue"); model.addAttribute("modelkey", "modelvalue"); return "redirect:/rm2.htm"; } @RequestMapping(value = "/rm2", method = RequestMethod.GET) public String rm2(Model model,HttpServletRequest request) { System.out.println("Entered rm2 method "); Map md = model.asMap(); for (Object modelKey : md.keySet()) { Object modelValue = md.get(modelKey); System.out.println(modelKey + " -- " + modelValue); } System.out.println("=== Request data ==="); java.util.Enumeration<String> reqEnum = request.getParameterNames(); while (reqEnum.hasMoreElements()) { String s = reqEnum.nextElement(); System.out.println(s); System.out.println("==" + request.getParameter(s)); } return "controller2output"; }
quelle
Javadoc-Beschreibung: "Eine FlashMap bietet eine Möglichkeit für eine Anforderung, Attribute zu speichern, die zur Verwendung in einer anderen bestimmt sind. Dies wird am häufigsten benötigt, wenn von einer URL zu einer anderen umgeleitet wird - z. B. das Post / Redirect / Get-Muster. Eine FlashMap wird vor dem gespeichert Weiterleitung (normalerweise in der Sitzung) und wird nach der Umleitung verfügbar gemacht und sofort entfernt. "
quelle