Spring MVC RedirectAttributes取值方法


RedirectAttributes是Spring mvc 3.1版本之后出來的一個功能,專門用於重定向之后還能帶參數跳轉的
他有兩種帶參的方式:
第一種: 
attr.addAttribute("param", value);  
這種方式就相當於重定向之后,在url后面拼接參數,這樣在重定向之后的頁面或者控制器再去獲取url后面的參數就可以了,但這個方式因為是在url后面添加參數的方式,所以暴露了參數,有風險
例:

<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在跳到頁面后馬上移除對象。所以你刷新一下后這個值就會丟掉
例:

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

這種方式確實能重定向帶參,但是有個問題,這個只能重定向到頁面上,也就是說重定向的這個頁面視圖,能用el表達式直接獲取你帶參的值,比如status 和message ,都能獲取。 可是我重定向到另一個Controller的時候,這個控制器里面沒法獲取這兩個參數

解決辦法1:

 

@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;
}

 

解決辦法2

@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;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM