Spring MVC 输出模型数据

来源:互联网 发布:大数据搜索引擎技术 编辑:程序博客网 时间:2024/06/10 02:26

Spring MVC 提供了以下几种途径输出模型数据(认情况:模型数据会自动保存到request域对象中):

  • ModelAndView: 处理方法返回值类型为ModelAndView 时, 方法体即可通过该对象添加模型数据
  • Map及Model: 入参为org.springframework.ui.Model、org.springframework.ui.ModelMap 或 java.uti.Map 时,处理方法返回时,Map中的数据会自动添加到模型中。
  • @SessionAttributes: 将模型中的某个属性暂存到 HttpSession 中,以便多个请求之间可以共享这个属性
  • @ModelAttribute: 方法入参标注该注解后, 入参的对象就会放到数据模型中
    1. ModelAndView:在测试方法中创建ModelAndView返回

控制器处理方法的返回值如果为ModelAndView, 则其既包含视图信息,也包含模型数据信息。

  1. Index.jsp
<a href="springmvc/TestModelAndView">TestModelAndView</a></br>


  1. 测试方法
 @RequestMapping("/TestModelAndView") public ModelAndView testModelAndView() { // 1.创建一个modelandview对象,提供一个视图的信息 // 因为ModelAndView 里面包含两部分信息:一个model,还有一个是view ModelAndView mv = new ModelAndView("success"); // 2.是向modelAndView中添加模型数据,现在下面的数据会默认保存到requet域对象 mv.addObject("name", "xiaomi"); // 3.返回modelAndView return mv; }


 

  1. Success.jsp
request域    name的信息: ${requestScope.name}<br>


 

  1. Map:一般作为测试方法的入参
  • Spring MVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。
  • 如果方法的入参为Map或Model类型,Spring MVC会将隐含模型的引用传递给这些入参。在方法体内,开发者可以通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的属性数据。
  1. Index.jsp
<a href="springmvc/TestMap">TestMap</a></br>


  1. 测试方法
@RequestMapping("/TestMap") public String testMap(Map<String, Object> map) { // 如果方法 的入参是一个map对象,那么map对象中的模型数据会自动加入到request域对象中 map.put("gender", "女"); map.put("age", 19); return success; }


 

  1. Success.jsp
request域    gender的信息: ${requestScope.gender}<br>request域    age的信息: ${requestScope.age}<br>


 

 

  1. @SessionAttributes
  • 若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个@SessionAttributes,Spring MVC将在模型中对应的属性存到 HttpSession中。
  • @SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中

@SessionAttributes(types=User.class)会将隐含模型中所有类型为User.class 的属性添加到会话中。

@SessionAttributes(value={user1, “user2”})会将隐含模型中key类型为user1user2的属性添加到会话中。

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

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

Request域中也会有

  1. Index.jsp
<a href="springMVC2/TestSessionAttribute">TestSessionAttribute</a></br>


 

  1. 测试方法
@RequestMapping("/TestSessionAttribute")public String testSessionAttribute(Map<String, Object> map) {User user = new User();user.setUsername("小米");user.setAge(18);user.setPassword("123123");// map中的数据会默认添加request域对象中map.put("user", user);return SUCCESS;}


  1. 测试类class上添加@SessionAttributes
@SessionAttributes(value={"user"}, types={String.class})@RequestMapping("/springmvc")@Controllerpublic class SpringMVCTest{}

注意:@SessionAttributes只能够添加在类上,不能添加在方法上


  1. Success.jsp
request域    name的信息: ${requestScope.name}<br>request域    gender的信息: ${requestScope.gender}<br>request域    age的信息: ${requestScope.age}<br>request域  user的数据:${requestScope.user}</br>session域  user的数据:${sessionScope.user}</br>


 

  1. ModelAttribute

Spring MVC在调用目标处理方法前,会先逐个调用在方法上标注了@ModelAttribute 的方法。

 

ModelAttribute的作用:

  • 放在功能处理方法(指用@ModelAttribute修饰的方法),用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用;
    1. Index.jsp
<a href="springMVC2/TestSessionAttribute">TestSessionAttribute</a></br><a href="springMVC2/updateUser?id=1">updateUser</a></br><a href="springMVC2/deleteUser?id=1">deleteUser</a></br>


 

  1. 测试类
@RequestMapping("/TestSessionAttribute")public String testSessionAttribute(Map<String, Object> map) {User user = new User();user.setUsername("张三");user.setAge(17);user.setPassword("123");// map中的数据会默认添加request域对象中map.put("user", user);return SUCCESS;}@RequestMapping("/testUser")public String testUser(User user){System.out.println(user);return SUCCESS;}//更新用户@RequestMapping("/updateUser")public String updateUser(Integer id,User user) {System.out.println(user);// 找到了这个用户,就模拟更新了user.setUsername("赵薇");System.out.println("更新了该用户");return SUCCESS;}//删除用户@RequestMapping("/deleteUser")public String deleteUser(Integer id,User user) {System.out.println(user);// 找到了这个用户,就模拟删除了System.out.println("删除了该用户");return SUCCESS;}

代码执行流程:

1. 执行 @ModelAttribute 注解修饰的方法: 从数据库中取出对象, 把对象放入到了 Map 中. 键为: user

2. SpringMVC 从 Map 中取出 User 对象, 并把表单的请求参数赋给该 User 对象的对应属性.

3. SpringMVC 把上述对象传入目标方法的参数.

 


0 0
原创粉丝点击