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
und addFlashAttribute
in der RedirectAttributes
Klasse ?
addAttribute
Übergibt die Werte als Anforderungsparameter anstelle des Modells. Wenn Sie also einige mit hinzufügen, können addAttribute
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";
}