Springmvc 在同一個controller和不一樣的controller中進行重定向redire

  •  redirect  forward
  • 在同一個controller之間進行重定向:redirect

一、咱們的請求在同一個controller之間進行重定向具體代碼以下:session

二、實例:app

 

前臺代碼:post

<formaction="user/update.do" method="post">測試

     id:<input type="text" name="id">url

     name:<input type="text" name="name">code

     sex:<input type="text"name="sex">orm

     <inputtype="submit" value="修改">對象

    </form>get

 

後臺代碼:input

@RequestMapping(value="/update.do")

public Stringupdate(User user){

Map<String,Object>map= new HashMap<String,Object>();

map.put("id",user.getId());

map.put("name",user.getName());

map.put("sex",user.getSex());

userService.updateUser(map);

// 這裏進行重定向的關鍵就是,redirect:這個關鍵字,這個關鍵字後面的就是你要重定向的請求路徑

// 還有就是若是是在同一controller中則不用使用"/"從根目錄開始,而若是是在不一樣的controller則必定要從根目錄開始。

return"redirect:select.do";

}

 

****  這裏測試一下使用更目錄的結果 *****

 

/**

 * 查詢用戶信息

 */

@RequestMapping(value="/select.do")

public Stringselect(Integer id,Map<String,Object> map){

List<Map<String,Object>>list= new ArrayList<Map<String,Object>>();

list=userService.selectUser(id);

map.put("mylist","you value");

return"index";

}

 

 

  • 在不一樣的controller之間進行重定向

一、在不一樣的controller之間進行重定向的時候最主要的一點就是,要制定具體controller的命名空間即 RequestMapping(value="redirectval"),還要指定爲根目錄,若是不是根目錄則一樣會在同一個controller中進 行查找,這樣的話,找不到會報錯,或錯誤重定向.

 

二、實例:

前臺代碼:

<formaction="user/update.do" method="post">

     id:<input type="text" name="id">

     name:<input type="text" name="name">

     sex:<input type="text"name="sex">

     <inputtype="submit" value="修改">

    </form>

 

後臺代碼:  這兩個後臺代碼是不一樣controller層的代碼

@RequestMapping(value="/update.do")

public Stringupdate(User user){

Map<String,Object>map= new HashMap<String,Object>();

map.put("id",user.getId());

map.put("name",user.getName());

map.put("sex",user.getSex());

userService.updateUser(map);

// 這裏進行重定向的關鍵就是,redirect:這個關鍵字,這個關鍵字後面的就是你要重定向的請求路徑

// 注意這裏要加「/」來從根目錄開始,

return "redirect:/user/select.do";

}

 

****  這裏測試一下使用更目錄的結果  ****

 

 

/**

 * 查詢用戶信息

 */

 

 @RequestMapping(value="/user")

Publicclass  user{

 

@RequestMapping(value="/select.do")

public Stringselect(Integer id,Map<String,Object> map){

List<Map<String,Object>>list= new ArrayList<Map<String,Object>>();

list=userService.selectUser(id);

map.put("mylist","you value");

return"index";

}

 

}

 

  • 在同一個controller之間進行轉發:forward:
  •  這裏不貼具體代碼,由於和上面的 重定向相同。

 

  • 在不一樣的controller之間進行轉發:forward:
  • 這個也是同樣只要命名空間和根目錄正確就沒問題;

這裏說說這個從新定向和轉發過程:當咱們發送請求經過處理映射器找到具體的方法,以後會return 一個值這個值就是視圖名稱,而當viewResolve 接收到這個視圖名成時進行判斷他的前綴是否是,redirect/forward 就會建立一個

RedirectView視圖,並分析了該視圖的渲染源碼,並分析了重定向中的路徑問題,參數問題,路徑變量問題等經常使用的問題。

 

 

******重定向、轉發時攜帶的參數*******

 

一、本身手動拼接,這樣在 return "redirect:select.do?id=1&name="+good+"";這樣就能夠在重定向的那個方法中進行數據的獲取,獲取方式和從前臺接受收據同樣。

具體實例:

@RequestMapping(value="/update.do")

public Stringupdate(User user){

Map<String,Object>map= new HashMap<String,Object>();

map.put("id",user.getId());

map.put("name",user.getName());

map.put("sex",user.getSex());

userService.updateUser(map);

             // 這裏使用了轉發,在書寫格式上轉發和重定向同樣

return"forward:select.do?code=200&status=ok!";

}

 

@RequestMapping(value="/select.do")

public Stringselect(Integer id,String code,String status,Map<String,Object> map,Modelmodel){

  String codes=code;

  String success=status;

  System.out.println(codes);

  System.out.println(success);

  System.out.println(model.toString());

List<Map<String,Object>>list= new ArrayList<Map<String,Object>>();

list=userService.selectUser(id);

map.put("mylist","you value");

return"index";

}

 

執行結果:

 

 

二、使用RedirectAttributes  這個對象,經過這個對象就能夠傳遞數據,這個類的對象有兩個方法能夠傳遞參數:

(1)、使用 addAttribute(key,value) 這個方法進行參數的傳遞,這種方式的傳遞和第一種同樣會在請求路勁中顯示,

(2)、使用addFlashAttribute(key,value) 這個方法進行傳遞,而這種方式就是將這個值放在了session中,因此參數不會在url的後面,若是刷新頁面則值就沒了!

 

**** 使用addAttribute來傳值****

具體實例: 使用 redirect 來傳值

@RequestMapping(value="/update.do")

public Stringupdate(User user,RedirectAttributes attr){

attr.addAttribute("code",200);

attr.addAttribute("status","success");

Map<String,Object>map= new HashMap<String,Object>();

map.put("id",user.getId());

map.put("name",user.getName());

map.put("sex",user.getSex());

userService.updateUser(map);

return"redirect:select.do";

}

 

@RequestMapping(value="/select.do")

public Stringselect(Integer id,String code,String status,Map<String,Object> map,Modelmodel){

  String codes=code;

  String success=status;

  System.out.println(codes);

  System.out.println(success);

  System.out.println(model.toString());

List<Map<String,Object>>list= new ArrayList<Map<String,Object>>();

list=userService.selectUser(id);

map.put("mylist","you value");

return"index";

}

 

 

結果:

 

 

 

******使用  addFlashAttribute來傳值******

@RequestMapping(value="/update.do")

public Stringupdate(User user,RedirectAttributes arr){

arr.addFlashAttribute("code","200");

arr.addFlashAttribute("status","ok!");

Map<String,Object>map= new HashMap<String,Object>();

map.put("id",user.getId());

map.put("name",user.getName());

map.put("sex",user.getSex());

userService.updateUser(map);

return"redirect:select.do";

}

 

/**

 * 查詢用戶信息

 */

@RequestMapping(value="/select.do")

public Stringselect(String code,String status,Map<String,Object>map,Map<String,Object> maps){

Integerid=1;

// 從執行結果咱們看到這裏code爲null

  String codes=code;

//  從執行結果咱們看到這裏status爲null

  String success=status;

  System.out.println(codes);

  System.out.println(success);

//  咱們在 方法中添加了一個參數maps這裏就能得到參數

  Stringmcode=(String)maps.get("code");

  Stringmstatus=(String)maps.get("status");

// 從輸出結果咱們能看到,這裏有值,使用model也能夠得到值,就是不知道怎麼獲取因此使用了map

  System.out.println(mcode);

  System.out.println(mstatus);

  System.out.println(maps.toString());

List<Map<String,Object>>list= new ArrayList<Map<String,Object>>();

list=userService.selectUser(id);

map.put("mylist","you value");

return"index";

}

執行結果:

 

 使用:forward  轉發這樣獲取不到值

@RequestMapping(value="/update.do")

public Stringupdate(User user,RedirectAttributes attr){

attr.addAttribute("code",200);

attr.addAttribute("status","success");

Map<String,Object>map= new HashMap<String,Object>();

map.put("id",user.getId());

map.put("name",user.getName());

map.put("sex",user.getSex());

userService.updateUser(map);

return"forward:select.do";

}

 

@RequestMapping(value="/select.do")

public Stringselect(Integer id,String code,String status,Map<String,Object> map,Modelmodel){

  String codes=code;

  String success=status;

  System.out.println(codes);

  System.out.println(success);

  System.out.println(model.toString());

List<Map<String,Object>>list= new ArrayList<Map<String,Object>>();

list=userService.selectUser(id);

map.put("mylist","you value");

return"index";

}

 

結果:

 

 

這裏forwar獲取不到值和他的存儲方式相關,由於他就是存在session中一轉發就沒值了,因此就爲null

相關文章
相關標籤/搜索