重定向取RedirectAttributes中的值
没⽤的话就不说了,像什么RedirectAttributes 是Spring mvc 3.1版本之后出来的⼀个功能,专门⽤于重定向之后还能带参数跳转的的⼯具类,⽹上⼀⼤堆!
来看看问题!
后端代码
@PostMapping("/dologin")
public String dologin(RedirectAttributes redirectAttributes){
redirectAttributes.addAttribute("error","我是错误信息");
return"redirect:/login";
}
界⾯取值
<!DOCTYPE html>
<html xmlns="/1999/xhtml" xmlns:th="">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="/dologin" method="post">
<ul>
<li class="top_1">
<span >[[${error}]]</span>
<input type="text" name="username" placeholder=" 邮箱/⽤户名/已验证⼿机"class="user"/>
</li>
<li>
<input type="password" name="password" placeholder=" 密码"class="password"/>
</li>
<li class="ent"><button type="submit"class="btn2"><a>登  ;录</a></button></li>
</ul>
</form>
</body>
</html>
跑起来界⾯效果!
哈哈,TMD值[[${error}]]取不出来
这⾥使⽤EL表达式是取不到值得,不信可以试试,这⾥也不是完全取不到值,可以使⽤JS来获取URL上的参数,那么这样是能取到值的,⽹上很多博客都只展⽰了后端JAVA代码,往往很多⼈都只在意这⼀句代码
redirectAttributes.addAttribute("error","我是错误信息");
el表达式获取session中的值
然后前端使⽤EL表达式疯狂的试探,也没试探出个啥玩意,就像我上⾯的演⽰代码和界⾯效果⼀样!记住addAttribute是⽆法使⽤EL表达式取值的!如果⾮要使⽤addAttribute重定向带值并且前端取值的话,前端那就只能使⽤JS取URL上的值了
在这⾥插⼊代码⽚
RedirectAttributes还提供了另⼀个⽅法,也能从重定向带值,我们修改⼀下代码试试看!
后端代码
@PostMapping("/dologin")
public String list(RedirectAttributes redirectAttributes, Model model){
redirectAttributes.addFlashAttribute("error","我是错误信息");
return"redirect:/";
}
前端代码不动
运⾏看看效果
诶,这个redirectAttributes.addFlashAttribute(“error”,“我是错误信息”);Html界⾯上使⽤EL表达式能取到!⽽且URL上也没有值了
详细介绍对⽐⼀下⼆者的区别
redirectAttributes.addAttributie(“prama”,value);
这种是等同于return:"redirect:/path/list?prama1=value1&prama2=value2 ",注意这种⽅法直接将传递的参数暴露在链接地址上,是不安全的,慎⽤。
redirectAttributes.addFlashAttributie(“prama”,value);
这种⽅法是隐藏了参数,链接地址上不直接暴露,但是能且只能在重定向的 “页⾯” 获取prama参数值。其原理就是放到session
中,session在跳到页⾯后马上移除对象。如果是重定向⼀个controller中是获取不到该prama属性值的。除⾮在controller中⽤
(@RequestParam(value = “prama”)String prama)注解,采⽤传参的⽅式。页⾯获值例
@PostMapping("/dologin")
public String list(RedirectAttributes redirectAttributes, Model model){
redirectAttributes.addAttribute("error","我是错误信息");
redirectAttributes.addFlashAttribute("flashError","我是FlashError错误信息");
return"redirect:/redTest";
}
@GetMapping("/redTest")
public String redTest(@RequestParam("error") String error){
System.out.println("error"+error);
System.out.println("flashError"+error);
return"login";
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。