Cris 学 SpringMVC(三):springMVC 是如何 处理模型数据

springMVC 处理模型数据的四种方式
  • ModelAndView: 处理方法返回值类型为 ModelAndView
    时, 方法体即可通过该对象添加模型数据

  • Map 及 Model: 入参为
    org.springframework.ui.Model、org.springframework.ui.
    ModelMap 或 java.uti.Map 时,处理方法返回时,Map
    中的数据会自动添加到模型中

  • @SessionAttributes: 将模型中的某个属性暂存到
    HttpSession 中,以便多个请求之间可以共享这个属性

  • @ModelAttribute: 方法入参标注该注解后, 入参的对象
    就会放到数据模型中

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

  • 示例代码

    /*
     * 目标方法的返回值可以是 ModelAndView 类型的
     * 其中可以包含视图信息和模型信息
     * springMVC 会把 ModelAndView 的model中的数据放入到request的域对象中
     */
    @RequestMapping("testModelAndView")
    public ModelAndView testModelAndView() {
        ModelAndView mv = new ModelAndView();
        mv.addObject("date", new Date());
        mv.setViewName(SUCCESS);
        return mv;
    }

- helloWorld.jsp

<a href="springMVC/testModelAndView">test ModelAndView</a>

- success.jsp

date:${requestScope.date }

测试图:

mark

Map 及 Model
  • Spring MVC 在内部使用了一个
    org.springframework.ui.Model 接口存
    储模型数据

  • Spring MVC 在调用方法前会创建一个隐
    含的模型对象作为模型数据的存储容器

– 如果方法的入参为 Map 或 Model 类
型,Spring MVC 会将隐含模型的引用传
递给这些入参。在方法体内,开发者可以
通过这个入参对象访问到模型中的所有数
据,也可以向模型中添加新的属性数据

  • 测试代码
/*
     * 目标方法可以添加Map 类型,实际上也可以是 Model 类型或者ModelMap 类型的参数,
     * 但是推荐使用 Map 类型,spring 会自动装饰这个 Map 类型的参数
     */
    @RequestMapping("testMap")
    public String testMap(Map<String, Object> map) {
        map.put("cars", Arrays.asList("法拉利","玛莎拉蒂","兰博基尼","保时捷"));
        return SUCCESS;
    }

- success.jsp

cars:${requestScope.cars }

测试图:

mark

@SessionAttributes 注解
  • 若希望在多个请求之间共用某个模型属性数据,则可以在
    控制器类上标注一个 @SessionAttributes, Spring MVC
    将在模型中对应的属性暂存到 HttpSession 中

  • @SessionAttributes 除了可以通过属性名指定需要放到会
    话中的属性外,还可以通过模型属性的对象类型指定哪些
    模型属性需要放到会话中

  • 示例代码

    /*
     * @SessionAttributes 注解除了可以通过属性名指定需要放到会话中的属性外(实际上使用的是 value 属性值)
     * 还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(实际上使用的是 type 属性值)
     * 
     * 注意:该注解只能放在类的上面,而不能修饰方法
     */
    @RequestMapping("testSessionAttributes")
    public String testSessionAttributes(Map<String, Object> map) {
        map.put("user", new User("zc-cris", "123", "23"));
        map.put("school", "重庆南开中学");
        return SUCCESS;
    }

- success.jsp

    request user:${requestScope.user }
    <br><br>
    session user:${sessionScope.user }
    <br><br>
    request school:${requestScope.school }
    <br><br>
    session school:${sessionScope.school }

示例图:

mark

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值