Supposons que vous ayez 2 contrôleurs. Si vous redirigez d'un contrôleur vers un autre contrôleur, les valeurs de l'objet modèle ne seront pas disponibles dans la base de données. [ ] l'autre contrôleur. Donc si vous voulez partager les valeurs de l'objet modèle il faut dire dans le premier contrôleur
addFlashAttribute("modelkey", "modelvalue");
Le modèle du second contrôleur contient maintenant la paire clé-valeur ci-dessus
Deuxième question ? Quelle est la différence entre addAttribute
y addFlashAttribute
en RedirectAttributes
classe
addAttribute
transmettra les valeurs en tant que paramètres de requête au lieu du modèle, de sorte que lorsque vous en ajoutez à l'aide de addAttribute
vous pouvez accéder à ces valeurs à partir de request.getParameter
Voici le code que j'ai utilisé pour comprendre ce qui se passe :
@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";
}