码迷,mamicode.com
首页 > 编程语言 > 详细

SpringMVC处理模型数据

时间:2018-11-29 11:03:45      阅读:144      评论:0      收藏:0      [点我收藏+]

标签: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;
    }

 

SpringMVC处理模型数据

标签:param   方法体   包含   name   view   会话   nat   href   return   

原文地址:https://www.cnblogs.com/toov5/p/10036029.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!