/**
* Spring MVC 提供了以下几种途径输出模型数据:
– ModelAndView: 处理方法返回值类型为 ModelAndView
时, 方法体即可通过该对象添加模型数据
– Map 及 Model: 入参为
org.springframework.ui.Model、org.springframework.ui.
ModelMap 或 java.uti.Map 时,处理方法返回时,Map
中的数据会自动添加到模型中。
– @SessionAttributes: 将模型中的某个属性暂存到
HttpSession 中,以便多个请求之间可以共享这个属性
– @ModelAttribute: 方法入参标注该注解后, 入参的对象
就会放到数据模型中
控制器处理方法的返回值如果为 ModelAndView, 则其既
包含视图信息,也包含模型数据信息。
• 添加模型数据:
– MoelAndView addObject(String attributeName, Object
attributeValue)
– ModelAndView addAllObject(Map<String, ?> modelMap)
• 设置视图:
– void setView(View view)
– void setViewName(String viewName)j
* @return
*/
@RequestMapping("ModelAndView")
public ModelAndView modelAndViewTest(){
Map<String, Object> model = new HashMap<String, Object>();
//设置数据域
model.put("name", "heguanhong");
//设置视图名称和数据域
ModelAndView modelAndView = new ModelAndView("springmvc/ModelAndView", model);
return modelAndView;
}
/**
* Spring MVC 在内部使用了一个
org.springframework.ui.Model 接口存
储模型数据
• 具体步骤
– Spring MVC 在调用方法前会创建一个隐
含的模型对象作为模型数据的存储容器。
– 如果方法的入参为 Map 或 Model 类
型,Spring MVC 会将隐含模型的引用传
递给这些入参。在方法体内,开发者可以
通过这个入参对象访问到模型中的所有数
据,也可以向模型中添加新的属性数据
即:页面上放入map中和model中的数据,均可以取到.
* @return
*/
@RequestMapping("ModelAndMap")
public String ModelAndMap(
Map<String, Object> map,
Model uiModel
){
String name = (String) map.get("nameInsession");
String name2 = (String) uiModel.asMap().get("modelTest");
String name3 = (String) uiModel.asMap().get("name");
map.put("name", "hgh1");
map.put("name2", "hgh2");
uiModel.addAttribute("name3", "hgh3");
return "springmvc/ModelAndMap";
}
/**
* 使用了@ModelAttribute注解的方法,
* @ModelAttribute注释的方法会在此controller每个方法执行前被执行,
* 因此对于一个controller映射多个URL的用法来说,要谨慎使用。
* 该注解会将被标注的方法的返回值,以key:value的方式,存储在数据模型中
*
* 在方法定义上使用 @ModelAttribute 注解:Spring MVC
在调用目标处理方法前,会先逐个调用在方法级上标注了
@ModelAttribute 的方法。
• 在方法的入参前使用 @ModelAttribute 注解:
– 可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数
绑定到对象中,再传入入参
– 将方法入参对象添加到模型中
* @return
*/
@ModelAttribute("modelTest")
public String modelTest(){
String string = "modelTest111";
System.out.println(string);
return string;
}
/**
* 想要将数据放入到session中,则可以这么用
* 1.先在controller上用注解:
* @SessionAttributes("nameInsession")
* 2.在方法体重,返回一个key值一样的,放入到数据域中:
* 注意session域中,和requst中等的key不能冲突.
*
* 严重: Servlet.service() for servlet [laweyecloud] in context with path [/laweyecloud] threw exception [Cannot expose session attribute 'nameInsession' because of an existing model object of the same name] with root cause
javax.servlet.ServletException: Cannot expose session attribute 'nameInsession' because of an existing model object of the same name
* @return
*/
// @ModelAttribute("nameInsession")
// public String nameInsessionTest(){
// String string = "nameInsessionValue";
// return string;
// }
/**
* *
* • 在方法定义上使用 @ModelAttribute 注解:Spring MVC
在调用目标处理方法前,会先逐个调用在方法级上标注了
@ModelAttribute 的方法。
• 在方法的入参前使用 @ModelAttribute 注解:
– 可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数
绑定到对象中,再传入入参
– 将方法入参对象添加到模型中
*/
@RequestMapping("ModelAttribute")
public String ModelAttribute(
@ModelAttribute("modelTest") String value,
Model uiModel
){
System.out.println(value);
uiModel.addAttribute("key", value);
return "springmvc/ModelAttribute";
}
springmvc_2_处理模型数据&视图和视图解析器
最新推荐文章于 2022-12-24 12:42:59 发布