天天看點

SpringMVC 第六章 模型資料

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

1.ModelAndView:

    處理方法傳回值類型為ModelAndView時,方法體即可通過該對象添加模型資料

    既包含視圖資訊,也包含模型資料資訊。

    ModelAndView中包含兩個添加資料模型的方法:

        1.ModelAndView addObject(String attributeName, Object attributeValue)

        2.ModelAndView addAllObject(Map<String,?>modelMap)

    ModelAndView包含兩個設定視圖的方法:

        1.void setView(View view)

        2.void setViewName(String viewName)

執行個體:
	@RequestMapping(value="testModelAndView")
	public ModelAndView testModelAndView () {
	    System.out.println("entry in ModelAndView");
	    ModelAndView mv = new ModelAndView();
	    mv.setViewName("success");
	    // ModelAndView中模型資料的值,都是放置到request範圍中的
	    mv.addObject("name", "MIKE");
	    return mv;
	}
	success.jsp中:
	    ${requestScope.name}顯示輸出
	注意事項:
		核心業務方法的傳回值為ModelAndView:模型資料,視圖
		ModelAndView當中模型資料是放置到請求範圍當中的
           

2.Map及Model:

    入參為org.springframework.ui.Model/org.springframework.ui.ModelMap或java.util.Map時,

    處理方法傳回時,Map中的資料會自動添加到模型中。

    具體步驟:

        SpringMVC 在調用方法前會建立一個隐含的模型對象作為模型資料的存儲容器

        如果方法的入參為Map或Model類型,SpringMVC會将隐含模型的引用傳遞給入參。

        在方法體内,可以通過這個入參對象通路到模型中的所有資料,

        也可以向模型中添加新的屬性資料

    使用方法:

        Map.put(String , Object)

        Model.addAttribute(String , Object)

        ModelMap.addAttribute(String, Object)

執行個體:
	Map:
	    @RequestMapping(value="/testMap")
	    public String testMap(Map<String,Object>map) {
		map.put("age", 12);
		return "success";
	    }

	Model:
	    @RequestMapping(value="/testModel")
	    public String testModel(Model model) {
		model.addAttribute("email", "[email protected]");
		return "success";
	}

	ModelMap:
	    @RequestMapping(value="/testModelMap")
	    public String testModelMap(ModelMap modelMap) {
		modelMap.addAttribute("city", "wuhan");
		return "success";
	    }
           

[email protected]:

    将模型中的某個屬性暫存到HttpSession中,以便多個請求之間可以共享這個屬性。

    @SessionAttributes除可以通過屬性名指定需要放到會話中的屬性外,還可以通過

    模型屬性的對象類型指定哪些模型屬性需要放到會話中

        @SessionAttributes(type=User.class)

            會将隐含模型中所有類型為User.class的屬性添加到會話中

        @SessionAttributes(value={"user1", "user2"})

        @SessionAttributes(types={User.class, Dept.class})

        @SessionAttributes(value={"user1", "user2"}, types={Dept.class})

    注意事項:    

        1.要求放置的值,必須在模型資料裡面(request範圍中有限)

        2.複制的方式:

            通過屬性的key值完成session的共享資料設定

            value:String[]

            value=["a","b"]

            也可以通過模型資料當中的類型,共享資料的設定

[email protected]:

    1.在方法定義上使用@ModelAttribute注解:

        SpringMVC 在調用目标處理方法前,會逐個調用在方法級上标注了@ModelAttribute的方法

        1.1 修飾沒有傳回值的方法

            執行ModelAttribute修飾方法

            擷取的原始資料放置到請求範圍中指定key對應的value

            pojo入參會從請求範圍當中查找指定key對應的value,找到的話,會将值賦給入參

            前端使用者輸入的值與入參進行綁定

執行個體:	
	@ModelAttribute
	public void start (Map<String,Object>map) {
	    // 模拟資料庫通路
	    UserInfo info = new UserInfo(101,"Tom","[email protected]","2015-10-12");
	    map.put("abc", info);
	}
	
	@RequestMapping(value="/testModelAttribute")
	public String testModelAttribute(@ModelAttribute(value="abc")UserInfo info) {
	    System.out.println("userInfo:"+ info);
	    return "success";
	}
           

1.2 修飾有傳回值的方法

執行個體:	
    @ModelAttribute(value="abc")
    public UserInfo start (Map<String,Object>map) {
	// 模拟資料庫通路
	UserInfo userInfo = new UserInfo(101,"Tom","[email protected]","2015-10-12");
	return userInfo;
    }
	
    @RequestMapping(value="/testModelAttribute")
    public String testModelAttribute(@ModelAttribute(value="abc")UserInfo info) {
	System.out.println("userInfo:"+ info);
	return "success";
    }
           

2.在方法的入參前使用@ModelAttribute注解:

        可從隐含對象中擷取隐含的模型資料中擷取對象

        再将請求參數綁定到對象中,再傳入入參

        将方法入參對象添加到模型中

繼續閱讀