springmvc_2_处理模型数据&视图和视图解析器

/**
     * 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";

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值