我是新的春天和學習RedirectAttributes
。下面是我正在執行的示例代碼。Spring:在RedirectAttributes中添加FlashAttribute
@RequestMapping(value="/")
public String app(Model model,RedirectAttributes rm) throws IOException{
UserCO userCO= new UserCO();
userCO.setEmail("[email protected]");
rm.addFlashAttribute("flashkey", "flashvalue");
rm.addFlashAttribute("userCO", userCO);
return "redirect:/controller1";
}
@RequestMapping(value="/controller1")
public String app1(Model model,HttpServletRequest request) throws IOException{
System.out.println("=====================================");
System.out.println("In Controller 1");
Map md = model.asMap();
for (Object modelKey : md.keySet()) {
Object modelValue = md.get(modelKey);
System.out.println("Model data =="+ modelKey + " -- " + modelValue);
}
java.util.Enumeration<String> reqEnum = request.getParameterNames();
while (reqEnum.hasMoreElements()) {
String s = reqEnum.nextElement();
System.out.println("Request data =="+ s+" : "+ request.getParameter(s));
}
return "redirect:/controller2";
}
@RequestMapping(value="/controller2")
public String app2(Model model,HttpServletRequest request) throws IOException{
System.out.println("=====================================");
System.out.println("In Controller 2");
Map md = model.asMap();
for (Object modelKey : md.keySet()) {
Object modelValue = md.get(modelKey);
System.out.println("Model data =="+ modelKey + " -- " + modelValue);
}
java.util.Enumeration<String> reqEnum = request.getParameterNames();
while (reqEnum.hasMoreElements()) {
String s = reqEnum.nextElement();
System.out.println("Request data =="+ s+" : "+ request.getParameter(s));
}
return "redirect:/controller3";
}
我已經加入字符串"flashvalue"
和豆userCO
的對象.I觀察到但─
- 在控制器1兩者
"flashvalue"
和userCO
是可用的。 不錯!但在Controller2中有"flashvalue"
可用,但userCO
不是。爲什麼? - 在控制器1中的數據進入模型ONY但在控制器2中相同 數據僅在請求中可用。爲什麼?
下面是我的控制檯日誌。
=====================================
在控制器1
模型數據== userCO - [email protected]
模型數據== flashkey - flashvalue
============ =========================
在控制器2中
請求數據== flashkey:flashvalue
有可能的任何其它方式獲得FlashAttribute
而非Model
結合?
這個原始數據來自哪裏?我只添加了'return'重定向:/ controller2「;'。 – TheCurious
在控制器1中可用的所有模型屬性將被添加爲對控制器2的請求的查詢參數(通過由原始請求設置爲「/」的flash屬性將快捷鍵引入模型) –
簡單地說,通過'.addAttribute()'添加到'RedirectAttributes'或'model'中的屬性'在重定向後可以在請求中使用。正確?那麼兩者的區別是什麼? – TheCurious