假设您有 2 个控制器。如果从一个控制器重定向到另一个控制器,则模型对象中的值在另一个控制器中将不可用。因此,如果您想共享模型对象值,则必须在第一个控制器中说
addFlashAttribute("modelkey", "modelvalue");
然后第二个控制器的模型现在包含上面的键值对。
第二个问题?课堂上和课堂上的区别是什么addAttribute
addFlashAttribute
RedirectAttributes
addAttribute
会将这些值作为请求参数而不是模型传递,因此当您添加一些使用时,您可以从addAttribute
request.getParameter
下面是代码。我曾经发现发生了什么:
@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";
}