• Spring MVC框架:第四章:属性域使用(request域、session域、application域)


    第六节 属性域使用(request域、session域、application域)
    1.request域

    在SpringMVC中,当我们想把一个对象存入请求域有很多种操作方式,用哪一个都可以。
    ①使用Model对象

    @RequestMapping("/requestAttrModel")
    public String requestAttrModel(Model model) {
        model.addAttribute("appleAttrName", "appleAttrValue");
        return "result";
    }
    

    ②使用ModelMap

    @RequestMapping("/requestAttrModelMap")
    public String requestAttrModelMap(ModelMap modelMap) {
        modelMap.addAttribute("bananaAttrName", "bananaAttrValue");
        return "result";
    }
    

    ③使用Map

    @RequestMapping("/requestAttrMap")
    public String requestAttrMap(Map<String, Object> map) {
        map.put("orangeAttrName", "orangeAttrValue");
        return "result";
    }
    

    ④使用HttpServletRequest

    @RequestMapping("/requestAttrRequest")
    public String requestAttrRequest(HttpServletRequest request) {
        request.setAttribute("grapeAttrName", "grapeAttrName");
        return "result";
    }
    

    2.session域
    向session域存入数据,真正有效的办法只有一个

    @RequestMapping("/sessionAttr")
    public String sessionAttr(HttpSession session) {
        session.setAttribute("sessionAttrName", "sessionAttrValue");
        return "result";
    }
    

    3.application域

    向application域存入数据需要先拿到ServletContext对象。前面介绍过获取ServletContext对象的两种方法。拿到ServletContext对象后调用setAttribute()方法。
    servletContext.setAttribute(“appAttrName”,“appAttrValue”);

    4.ModelAndView

    在把数据存入请求域时还有一个方法:使用ModelAndView对象。

    @RequestMapping("/modelAndView")
    public ModelAndView testModelAndView() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("result");
        modelAndView.addObject("mavAttrName", "mavAttrValue");
        return modelAndView;
    }
    

    见名知意,ModelAndView就是把模型和视图封装到一起。其实即使我们没有明确使用ModelAndView,SpringMVC也会在handler方法执行完成后把模型和视图封装到ModelAndView对象中。

    在这里插入图片描述

    //检查handler方法的返回值是否为ModelAndView类型
    if (returnValue instanceof ModelAndView) {
        ModelAndView mav = (ModelAndView) returnValue;
        //合并模型对象
        mav.getModelMap().mergeAttributes(implicitModel);
        return mav;
    }
    //检查handler方法的返回值是否为Model类型
    else if (returnValue instanceof Model) {
        //创建ModelAndView对象并将之前收集的模型对象存进去
        return new ModelAndView().addAllObjects(implicitModel).addAllObjects(((Model) returnValue).asMap());
    }
    //检查handler方法的返回值是否为View类型
    else if (returnValue instanceof View) {
        //创建ModelAndView对象并存入视图和模型
        return new ModelAndView((View) returnValue).addAllObjects(implicitModel);
    }
    //检查handler方法的返回值是否为Map类型
    else if (returnValue instanceof Map) {
        //创建ModelAndView对象并将之前收集的模型对象存进去
        return new ModelAndView().addAllObjects(implicitModel).addAllObjects((Map<String, ?>) returnValue);
    }
    //检查handler方法的返回值是否为String类型
    else if (returnValue instanceof String) {
        //创建ModelAndView对象并把handler方法返回的字符串作为视图名称,且存入之前收集的模型数据
        return new ModelAndView((String) returnValue).addAllObjects(implicitModel);
    }
    
  • 相关阅读:
    重构之重新组织函数(Split Temporary Variable)
    HammperSpoon 不能 Focus Google Chrome 的问题
    如何让 vim 可以在命令行执行命令并且附加参数
    This bison version is not supported for regeneration of the Zend/PHP parsers
    php cURL library is not loaded
    aws linuxbrew GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2
    gen-cpp/.deps/ChildService.Plo: No such file or directory
    快速解码base64和utf-8的ASCII编码和URL解码
    英文版firefox显示中文字体丑的问题
    linux find 反转 查找没有被找到的结果
  • 原文地址:https://www.cnblogs.com/javawxid/p/12812072.html
Copyright © 2020-2023  润新知