版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012848709/article/details/82835655
楔子
阅读Spring实战 第四版 看到了
跨重定向请求传递数据
,做了笔记,以备不时之需。
从定向传递参数2中方式
方式1 使用URL模版路径
@RequestMapping("red2")
public String reqStrs(Model model) {
Person p = new Person();
p.setName("lifneg");
p.setPwd("000lifeng");
model.addAttribute("name", p.getName());
model.addAttribute("pwd", p.getPwd());
model.addAttribute("address", "huqianyutang");
return "redirect:/grq/{name}";
// 浏览器地址显示
// http://localhost/ssm/grq/lifneg?pwd=000lifeng&address=huqianyutang
}
使用占位符填充到URL模版中,而非直接连接到重定向String中,这样更加安全。
方式2 通过flash属性发送数据
@RequestMapping("red3")
public String reqStrsFlash(RedirectAttributes model) {
Person p = new Person();
p.setName("lifneg");
p.setPwd("000lifeng");
model.addAttribute("name", p.getName());
model.addFlashAttribute("nameFlash", p);
return "redirect:/grq/redDir/{name}";
// 浏览器地址显示 http://localhost/ssm/grq/lifneg
}
取值
@RequestMapping("redDir/{name}")
public Object redDir(@PathVariable String name, Model model) {
System.out.println(name);
Map<String, Object> map;
if (model.containsAttribute("nameFlash")) {
System.out.println(model);
}
// 打印结果
// lifneg
// {nameFlash=Person [name=lifneg, pwd=000lifeng]}
// Person [name=lifneg, pwd=000lifeng]
// 重中取出值
map = model.asMap();
System.out.println(map.get("nameFlash"));
Object attribute = req.getAttribute("name");
return "";
}
Spring提供了将数据发送为flash属性,按照定义,flash属性会一致携带数据直到下一次请求,然后消失。
RedirectAttributes提供了addFlashAttribute
添加flash属性。
在重定向执行之前,所有的flash属性都会复制到会话中,重定向后,存在会话中的flash属性会被取出,并从会话转移到模型中。
https://blog.csdn.net/weiyangdong/article/details/79088368
ModelMap
之前看过``今天重温一次,发现他也是吧请求地址拼接了,只是基本类型,不能用于对象类型
@RequestMapping("/redMp")
public String redMv(ModelMap model) {
Person p = new Person();
p.setName("豆子");
p.setPwd("000lifeng");
model.addAttribute("per", p);
model.addAttribute("names", p.getName());
return "redirect:/grq/result.do";
//浏览器地址 http://localhost/ssm/grq/result.do?name=%E8%B1%86%E5%AD%90
}
@ResponseBody
@RequestMapping("result")
public Object result(ModelMap model, String names,Person per) {
return per;
}