1.送出的域名稱和處理方法的參數名一緻
這種好辦,比如前端表單的參數名稱為name,後端請求的形參也是name,那麼就可以接收到,如果兩者名字不一樣,那麼接收不到,就會顯示null。
2.送出的域名稱和處理方法的參數名不一緻
如果不一緻,有什麼解決辦法呢?如果前端送出的是username
那麼後端加這個個注解,一是可以解決這個參數名不一緻的問題,二十可以告訴别人這兒是要接受前端參數的。
//@RequestParam("username") : username送出的域的名稱 .
@RequestMapping("/hello")
public String hello(@RequestParam("username") String name){
System.out.println(name);
return "hello";
}
3.送出的是一個對象
要求送出的表單域和對象的屬性名一緻 , 參數使用對象即可
1、實體類
public class User {
private int id;
private String name;
private int age;
//構造
//get/set
//tostring()
}
2、送出資料 : http://localhost:8080/mvc04/user?name=hahah&id=1&age=15
3、處理方法 :
@RequestMapping("/user")
public String user(User user){
System.out.println(user);
return "hello";
}
背景輸出 : User { id=1, name=‘hahah’, age=15 }
說明:如果使用對象的話,前端傳遞的參數名和對象名必須一緻,否則就是null。
4.三個不同資料顯示到前端的對象
第一種 : 通過ModelAndView
public class ControllerTest1 implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//傳回一個模型視圖對象
ModelAndView mv = new ModelAndView();
mv.addObject("msg","ControllerTest1");
mv.setViewName("test");
return mv;
}
}
第二種 : 通過ModelMap
@RequestMapping("/hello")
public String hello(@RequestParam("username") String name, ModelMap model){
//封裝要顯示到視圖中的資料
//相當于req.setAttribute("name",name);
model.addAttribute("name",name);
System.out.println(name);
return "hello";
}
第三種 : 通過Model
@RequestMapping("/ct2/hello")
public String hello(@RequestParam("username") String name, Model model){
//封裝要顯示到視圖中的資料
//相當于req.setAttribute("name",name);
model.addAttribute("msg",name);
System.out.println(name);
return "test";
}
三種不同對象的對比:
Model 隻有寥寥幾個方法隻适合用于儲存資料,簡化了新手對于Model對象的操作和了解;
ModelMap 繼承了 LinkedMap ,除了實作了自身的一些方法,同樣的繼承 LinkedMap 的方法和特性;
ModelAndView 可以在儲存資料的同時,可以進行設定傳回的邏輯視圖,進行控制展示層的跳轉。