Spring MVC提供瞭如下幾種途徑輸出模型數據:
java
-- ModelAndView:處理方法返回值類型爲ModelAndView時,方法體便可經過該對象添加模型數據。
spring
--Map及Model:入參爲org.springframework.ui.Model、org.springframework.ui.ModelMap或java.uti.Map時,處理方法返回時,Map中的數據會自動添加到模型中。session
--@SessionAttributes:將模型中的某個屬性暫存到HttpSession中,以便多個請求之間能夠共享這個屬性到Httpsession中,以便多個請求之間共享這個屬性。
app
--@ModelAttribute :方法入參標註該註解後,入參的對象就會放到數據模型中。
jsp
@RequestMapping("/testModelAndView") public ModelAndView testModelAndView(){ String viewName = "success"; ModelAndView modelAndView = new ModelAndView(viewName); //添加模型數據到ModelAndView modelAndView.add("time",new Date()); return modelAndView; }
頁面獲取參數jsp頁面ui
$(requestScope.time)
從這裏能夠看出來,SpringMVC會把ModelAndView的model中數據放入到request域對象中。
code
2、Map 及 Model使用
對象
SpringMVC在調用方法前會建立一個隱含的模型對象做爲模型數據的存儲容器。
開發
若是方法的入參爲Map或Model類型。SpringMVC會將隱含類型的引用傳遞給這些入參,在方法體內,開發者能夠經過這個入參對象訪問到模型中的全部數據,也能夠像模型中添加新的屬性數據。
io
@RequestMapping("/testMap") public String testMap(Map<String,Object> map){ map.put("names",Arrays.asList("tome","jack',"mike")); return "success"; }
調用模型數據的方法同ModeAndView 同樣,數據都放到了request域對象中。
3、@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","tom@163.com",12); map.put("user",user); map.put("name","tom"); return "success"; } }
這裏將會把Map集合中的數據保存到Request和Session域對象中,獲取Session模型數據
$(requestScope.user) $(sessionScope.user) $(requestScope.name) $(sessionScope.name)