springMVC模型資料
阿新 • • 發佈:2018-11-11
Spring MVC提供了以下幾種途徑輸出模型資料:
– ModelAndView:處理方法返回值型別為ModelAndView時,方法體即可通過該物件新增模型資料。
–Map及Model:入參為org.springframework.ui.Model、org.springframework.ui.ModelMap或java.uti.Map時,處理方法返回時,Map中的資料會自動新增到模型中。
–@SessionAttributes:將模型中的某個屬性暫存到HttpSession中,以便多個請求之間可以共享這個屬性到Httpsession中,以便多個請求之間共享這個屬性。
–@ModelAttribute :方法入參標註該註解後,入參的物件就會放到資料模型中。
- ModelAndView:通過轉發給目標檢視,資料放在request域中
@RequestMapping("/handle43")
public ModelAndView handle43(){
User user=new User("zhangsan","1222",23);
ModelAndView mav=new ModelAndView();
mav.setViewName("index");
mav.addObject("user",user);
return mav;
}
- @ModelAttribute:入參的物件就會放到資料模型中,這個模型資料只能向頁面傳遞,不能向請求傳遞。通過轉發的請求無法獲取這個資料,只能通過HttpServletRequest物件獲取這個資料。如:
/*這個方法如果返回一個頁面,那麼頁面是可以獲取到資料的*/
@RequestMapping(value="/handle41",produces ="application/json;charset=utf-8")
public String handle41(@ModelAttribute User user){
user.setAge(26 );
return "forward:/handle42";//如果使用redirect,則獲取不到資料
}
//這個方法不正確
@RequestMapping(value="/handle42",produces = "application/json;charset=utf-8")
public @ResponseBody User handle42(ModelMap model){
User user=(User)model.get("user");//這裡user取不到,為null,
return user;
}
//這個方法可以取到handle41傳遞過來的user
@RequestMapping(value="/handle42",produces = "application/json;charset=utf-8")
public @ResponseBody User handle42(HttpServletRequest request){
User user=(User)request.getAttribute("user");//這裡可以取到user
System.out.println(user);
return user;
}
//或者也可以這個寫,但是要注意@RequestBody的使用條件,不然可能會報415,406等錯誤
@RequestMapping(value="/handle42",produces = "application/json;charset=utf-8")
public @ResponseBody User handle42(@RequestBody User user){
return user;
}
- Map 及 Model使用
SpringMVC在呼叫方法前會建立一個隱含的模型物件作為模型資料的儲存容器。
如果方法的入參為Map或Model型別。SpringMVC會將隱含型別的引用傳遞給這些入參,在方法體內,開發者可以通過這個入參物件訪問到模型中的所有資料,也可以像模型中新增新的屬性資料。
@RequestMapping("/handle44")
public String handle43(){
ModelMap mm=new ModelMap();
mm.addAttribute("user",new User("zhangsan","lisi",23));
return "index";
}
- @SessionAttributes
在控制器類上標註一個@SessionAttributes,SpringMVC將在模型中對應的屬性暫存到HttpSession中。
@SessionAttributes除了可以通過屬性名指定需要放到會話中的屬性外,還可以通過模型屬性的物件型別指定哪些模型屬性需要放到會話中
–@SessionAttributes(types=User.class)會將隱含模型中所有型別為User.class的屬性新增到會話中。
–@SessionAttributes(value={“user1”,”user2”})
–@SessionAttributes(type={User.class,Dept.class})
–@SessionAttributes(value={“user1”,”user2”},types{String.class})
@SessionAttributes(value={"user2"},types="String.class")
@Controller
public class SpringMVCTest{
@RequestMappping("/test/sessionAttribute")
public String testSessionAttribute(Map<String ,Object> map){
User user = new User("tom","123","[email protected]",12);
map.put("user",user);
map.put("name","tom");
return "success";
}
}
這裡將會把Map集合中的資料儲存到Request和Session域物件中,獲取Session模型資料
文章部分來源:https://my.oschina.net/u/2321816/blog/546964 (侵刪)