Spring MVC 传递模型数据到视图中的方法总结
一般来说,有如下的4种方法来传递模型数据到视图中
1、ModelAndView
要求:处理方法返回值类型为 ModelAndView。在方法体中我们通过该ModelAndView对象添加模型数据。
2、Model/Map/ModelMap
要求:使用org.springframework.ui.Model、org.springframework.ui.ModelMap 或 Java.uti.Map 作为处理方法的入參时,当处理方法返回时,Map中的数据会自动添加到模型中,具体实例将在后面介绍。
3、@SessionAttributes
使用该注解来注解某个类,使得将模型中的某个属性暂存到HttpSession 中,以便多个请求之间可以共享这个属性。
4、@ModelAttribute
该注解即可注解在有返回值的方法上,无返回值的方法上,还可以注解在方法入参上,当入參标注该注解后, 入参的对象就会放到数据模型中,具体将在后面进行介绍。
下面将分别以例子的形式进行介绍。
ModelAndView
1、创建ModelAndView,并传入模型数据
@Controller
public class HelloController {
@RequestMapping(value = "/testModelAndView.do",method = RequestMethod.GET)
public ModelAndView testModelAndView(){
String viewName = "hello";//视图名
ModelAndView modelAndView = new ModelAndView(viewName);
modelAndView.addObject("time",new Date());
modelAndView.addObject("name","ModelAndView");
return modelAndView;
}
}
该处理方法返回的是一个ModelAndView对象,且在方法体中添加了以“time”和“name”为key的数据。
2、编写JSP
编写名为:“hello.jsp”,内容如下:
<html>
<body>
<h2>method:${requestScope.name}</h2>
${requestScope.time}<br>
${requestScope.get("time")}<br>
${time}
</body>
</html>
这样,在浏览器中输入:localhost:8080/testModelAndView.do ,即可看到如下的输出结果:
注意:
requestScope.time, {requestScope.get(“time”)},${time}这三种写法效果是一样的,在不同的书籍/博客中所看到的都是其中的一种。
2、Model/Map/ModelMap
Spring MVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。
如果方法的入参为 Map 或 Model 类型,Spring MVC 会将隐含模型的引用传递给这些入参。在方法体内,我们可以通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的属性数据。
Model和Map使用上基本一样,具体实现代码如下图所示。
@RequestMapping(value = "/testModel.do",method = RequestMethod.GET)
public String testModel(Model model){
model.addAttribute("time",new Date());
model.addAttribute("name","Model");
return "hello";
}
@RequestMapping(value = "/testMap.do",method = RequestMethod.GET)
public String testMap(Map<String,Object> map){
map.put("time",new</