ger*_*tan 70 java spring spring-mvc
到目前为止,我的理解是在我们的控制器请求映射方法中,我们可以指定RedirectAttributes参数,并在请求被重定向时使用属性填充它.
示例:
@RequestMapping(value="/hello", method=GET)
public String hello(RedirectAttributes redirAttr)
{
// should I use redirAttr.addAttribute() or redirAttr.addFlashAttribute() here ?
// ...
return "redirect:/somewhere";
}
Run Code Online (Sandbox Code Playgroud)
然后,重定向属性将在重定向到的目标页面上可用.
但是RedirectAttributes类有两种方法:
已经阅读了一段时间的Spring文档,但我有点迷失了.这两者之间的根本区别是什么,我应该如何选择使用哪一个?
Bij*_*men 94
这是区别:
addFlashAttribute()实际上将属性存储在flashmap中
(在用户内部维护session并在下次重定向请求完成后删除)
addAttribute()实质上是从您的属性构造请求参数,并使用请求参数重定向到所需的页面.
因此,优势的addFlashAttribute()将是你可以几乎任何对象存储在您的闪光属性(因为它不序列化为请求参数所有,但保持为对象),而与addAttribute()因为你添加的对象被转化为正常请求param,你非常局限于像String或原语这样的对象类型.
小智 15
假设您有2个控制器.如果从一个控制器重定向到另一个控制器,则模型对象中的值将不会在另一个控制器中可用.因此,如果您想共享模型对象值,那么您必须在第一个控制器中说
addFlashAttribute("modelkey", "modelvalue");
Run Code Online (Sandbox Code Playgroud)
然后第二个控制器的模型现在包含上面的键值对..
第二个问题?有什么区别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";
}
Run Code Online (Sandbox Code Playgroud)
小智 7
Javadoc描述: "FlashMap为一个请求提供了一种存储打算在另一个URL中使用的属性的方法.这在从一个URL重定向到另一个URL时最常见 - 例如Post/Redirect/Get模式.在FlashMap之前保存FlashMap重定向(通常在会话中)并在重定向后可用并立即删除."
| 归档时间: |
|
| 查看次数: |
57886 次 |
| 最近记录: |