标签:param 方法体 包含 name view 会话 nat href return
模型数据放到域对象里面(一般指请求域)
Spring mvc里面有四种方法:
ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据
Map 及 Model: 入参为org.springframework.ui.Model、org.springframework.ui. ModelMap 或 java.uti.Map 时,处理方法返回时,Map中的数据会自动添加到模型中。
@SessionAttributes: 将模型中的某个属性暂存到HttpSession 中,以便多个请求之间可以共享这个属性
@ModelAttribute: 方法入参标注该注解后, 入参的对象就会放到数据模型中
1、控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息,也包含模型数据信息。
jsp:
index:
<a href="springmvc/testModelAndView">Test ModelAndView</a>
success:
<h4>Sucess Page</h4> time: ${requestScope.time } <br><br>
controller:
/** * 目标方法的返回值可以是 ModelAndView 类型。 * 其中可以包含视图和模型信息 * SpringMVC 会把 ModelAndView 的 model 中数据放入到 request 域对象中. * @return */ @RequestMapping("/testModelAndView") public ModelAndView testModelAndView(){ String viewName = SUCCESS; //视图的名字 ModelAndView modelAndView = new ModelAndView(viewName); //添加模型数据到 ModelAndView 中. modelAndView.addObject("time", new Date()); return modelAndView; }
2、Spring MVC 在内部使用了一个org.springframework.ui.Model 接口存储模型数据
步骤是这样的:
Spring MVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。
如果方法的入参为 Map 或 Model 类型,Spring MVC 会将隐含模型的引用传 递给这些入参。在方法体内,开发者可以 通过这个入参对象访问到模型中的所有数 据,也可以向模型中添加新的属性数据
index.jsp:
<a href="springmvc/testMap">Test Map</a>
success.jsp:
names: ${requestScope.names }
controller:
/** * 目标方法可以添加 Map 类型(实际上也可以是 Model 类型或 ModelMap 类型)的参数. * @param map * @return */ @RequestMapping("/testMap") public String testMap(Map<String, Object> map){ System.out.println(map.getClass().getName()); map.put("names", Arrays.asList("Tom", "Jerry", "Mike")); return SUCCESS; }
上面的参数把模型数据放在请求域里
下面放在session域
若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个 @SessionAttributes, Spring MVC 将在模型中对应的属性暂存到 HttpSession 中。
@SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些 模型属性需要放到会话中
index.jsp:
<a href="springmvc/testSessionAttributes">Test SessionAttributes</a>
success.jsp:
request user: ${requestScope.user } <br><br> session user: ${sessionScope.user } <br><br> request school: ${requestScope.school } <br><br> session school: ${sessionScope.school } <br><br>
controller中:
控制器上面加@SessionAttributes 有两个属性值 既放在请求域 又放在 Session域里面 value里面可以放多个key的名字 还可以放class类型的参数 这里spring类型的也会有同样的存放效果
/** * @SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外(实际上使用的是 value 属性值), * 还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(实际上使用的是 types 属性值) * * 注意: 该注解只能放在类的上面. 而不能修饰放方法. */ @RequestMapping("/testSessionAttributes") public String testSessionAttributes(Map<String, Object> map){ User user = new User("Tom", "123456", "tom@atguigu.com", 15); map.put("user", user); map.put("school", "atguigu"); return SUCCESS; }
标签:param 方法体 包含 name view 会话 nat href return
原文地址:https://www.cnblogs.com/toov5/p/10036029.html