(1)重定向与Flash属性
在一个请求处理方法Action中如果返回结果为“index”字符则表示转发到视图index,有时候我们需要重定向,则可以在返回的结果前加上一个前缀“redirect:”,可以重定向到一个指定的页面也可以是另一个action,示例代码如下:
// 重定向
@RequestMapping("/action2")
public String action2(Model model) {
return "foo/index";
}
@RequestMapping("/action3")
public String action3(Model model) {
model.addAttribute("message", "action3Message");
return "redirect:action2";
}
当请求http://localhost:8087/SpringMVC02/foo/action3时运行结果如下:
在action3中返回的结果为redirect:action2,则表示重定向到action2这个请求处理方法,所有重定向都是以当前路径为起点的,请注意路径。在action3向model中添加了名称message的数据,因为重定向到action2中会发起2次请求,为了保持action3中的数据Spring MVC自动将数据重写到了url中。为了实现重定向时传递复杂数据,可以使用Flash属性,示例代码如下:
// 接收重定向参数
@RequestMapping("/action2")
public String action2(Model model, Product product) {
model.addAttribute("message", product);
System.out.println(model.containsAttribute("product")); // true
return "foo/index";
}
//重定向属性
@RequestMapping("/action3")
public String action3(Model model, RedirectAttributes redirectAttributes) {
Product product = new Product(2, "iPhone7 Plus", 6989.5);
redirectAttributes.addFlashAttribute("product", product);
return "redirect:action2";
}
当访问action3时,首先创建了一个product产口对象,将该对象添加到了Flash属性中,在重定向后取出,个人猜测应该暂时将对象存入了Session中。当请求foo/action3时运行结果如下: