Spring MVC RedirectAttributes取值方法

RedirectAttributes是Spring mvc 3.1版本以后出来的一个功能,专门用于重定向以后还能带参数跳转的
他有两种带参的方式:
第一种: 
attr.addAttribute("param", value);  
这种方式就至关于重定向以后,在url后面拼接参数,这样在重定向以后的页面或者控制器再去获取url后面的参数就能够了,但这个方式由于是在url后面添加参数的方式,因此暴露了参数,有风险
例:java

<br>
attr.addFlashAttribute( "name" "123" );  <br>
attr.addFlashAttribute( "success" "success" );<br>
return  "redirect:/index" ;<br>

这样就至关于:return "redirect:/index?name=123&success=success"

第二种: 
attr.addFlashAttribute("param", value);
这种方式也能达到从新向带参,并且能隐藏参数,其原理就是放到session中,session在跳到页面后立刻移除对象。因此你刷新一下后这个值就会丢掉
例:session

<br>
attr.addFlashAttribute( "status" , "999" );<br>
attr.addFlashAttribute( "message" , "登陆失败" );<br>
return  "redirect:/toLogin" ;<br>
 

这种方式确实能重定向带参,可是有个问题,这个只能重定向到页面上,也就是说重定向的这个页面视图,能用el表达式直接获取你带参的值,好比status 和message ,都能获取。 但是我重定向到另外一个Controller的时候,这个控制器里面无法获取这两个参数mvc

解决办法1:app

 

@RequestMapping("flash1")
public String flash(RedirectAttributes redirectAttributes) {
redirectAttributes.addFlashAttribute("username", "Biao");
return "redirect:flash2";
}

@RequestMapping("flash2")
public String flash2(@ModelAttribute("username") String username) {
System.out.println("拿到的username="+username);
return "username: " + username;
}ui

 

解决办法2url

@RequestMapping("/zh")
    public String reZh(RedirectAttributes attr){
        attr.addAttribute("time","ssssss");
        attr.addFlashAttribute("hi","hello");
        return "redirect:/date?time={time}";
  }


  @GetMapping("/date")
   public String toDate(@RequestParam(value = "time",required = false)String s,HttpServletRequest request){
        Object hi = RequestContextUtils.getInputFlashMap(request).get("hi");
        System.out.println(hi);
        return s;
    }
相关文章
相关标签/搜索