1. 程式人生 > >springMVC模型資料

springMVC模型資料

Spring MVC提供了以下幾種途徑輸出模型資料:

– ModelAndView:處理方法返回值型別為ModelAndView時,方法體即可通過該物件新增模型資料。
–Map及Model:入參為org.springframework.ui.Model、org.springframework.ui.ModelMap或java.uti.Map時,處理方法返回時,Map中的資料會自動新增到模型中。
–@SessionAttributes:將模型中的某個屬性暫存到HttpSession中,以便多個請求之間可以共享這個屬性到Httpsession中,以便多個請求之間共享這個屬性。
–@ModelAttribute :方法入參標註該註解後,入參的物件就會放到資料模型中。

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


  1. 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";
    }


  1. @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 (侵刪)