一、咱們的請求在同一個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的命名空間即 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";
}
}
這裏說說這個從新定向和轉發過程:當咱們發送請求經過處理映射器找到具體的方法,以後會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