• SprimgMVC学习笔记(五)—— Controller方法返回值


    一、返回ModelAndView

      controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view。

    /**
         * 查询商品列表
         * @return
         */
        @RequestMapping(value={"itemList","itemListAll"})
        public ModelAndView queryItemList(){
            // 获取商品数据
            List<Item> list = itemService.queryItemList();
            ModelAndView modelAndView = new ModelAndView();
            // 把商品数据放到模型中
            modelAndView.addObject("itemList", list);
            // 设置逻辑视图
            modelAndView.setViewName("itemList");
            
            return modelAndView;
        }

      不建议使用(不解耦)

    二、返回void

           在Controller方法形参上可以定义request和response,使用request或response指定响应结果。适用Ajax

    • 使用request转发页面:request.getRequestDispatcher("页面路径").forward(request, response);
      request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response);
    • 通过response页面重定向:response.sendRedirect("url")
      response.sendRedirect("/springmvc-web/itemEdit.action");
    • 通过response指定响应结果,例如响应json数据
      response.getWriter().print("{"abc":123}");

      代码演示:  

    /**
     * 返回void测试
     * 
     * @param request
     * @param response
     * @throws Exception
     */
    @RequestMapping("queryItem")
    public void queryItem(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // 1 使用request进行转发
        // request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request,
        // response);
    
        // 2 使用response进行重定向到编辑页面
        // response.sendRedirect("/springmvc-web2/itemEdit.action");
    
        // 3 使用response直接显示
        response.getWriter().print("{"abc":123}");
    }

    三、返回字符串(推荐)

    3.1 逻辑视图名

      controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。

      @RequestMapping("/itemEdit")
        public String queryItemById(int id,Model model){
            // 根据id查询商品信息
            Item item = itemService.queryItemById(id);
            // 把结果传递给页面
            //ModelAndView modelAndView = new ModelAndView();
            //modelAndView.addObject("item", item);
            // 设置逻辑视图
            //modelAndView.setViewName("itemEdit");
            
            // 把商品数据放到模型中
            model.addAttribute("item", item);
            
            //指定逻辑视图名,经过视图解析器解析为jsp物理路径:/WEB-INF/jsp/itemList.jsp
            return "itemEdit";
        }

    3.2 Redirect重定向

      Contrller方法返回字符串可以重定向到一个url地址。

      如下商品修改提交后重定向到商品编辑页面。

    /**
     * 更新商品
     * 
     * @param item
     * @return
     */
    @RequestMapping("updateItem")
    public String updateItemById(Item item) {
        // 更新商品
        this.itemService.updateItemById(item);
    
        // 修改商品成功后,重定向到商品编辑页面
        // 重定向后浏览器地址栏变更为重定向的地址,
        // 重定向相当于执行了新的request和response,所以之前的请求参数都会丢失
        // 如果要指定请求参数,需要在重定向的url后面添加 ?itemId=1 这样的请求参数
        return "redirect:/itemEdit.action?itemId=" + item.getId();
    }

    3.3 forward转发

      Controller方法执行后继续执行另一个Controller方法

      如下商品修改提交后转向到商品修改页面,修改商品的id参数可以带到商品修改方法中。

    /**
     * 更新商品
     * 
     * @param item
     * @return
     */
    @RequestMapping("updateItem")
    public String updateItemById(Item item) {
        // 更新商品
        this.itemService.updateItemById(item);
    
        // 修改商品成功后,继续执行另一个方法
        // 使用转发的方式实现。转发后浏览器地址栏还是原来的请求地址,
        // 转发并没有执行新的request和response,所以之前的请求参数都存在
        return "forward:/itemEdit.action";
    
    }
  • 相关阅读:
    P1247 取火柴游戏 (奇异局势)
    1290A
    P1236 算24点
    LCP 4. 覆盖
    leetcode 1066. 校园自行车分配 II
    hdu 2255 奔小康赚大钱
    NC200546 回文串
    上市是什么意思 为什么上市就有钱了
    主板、中小板、创业板、新三板的区别是什么?
    熔断机制
  • 原文地址:https://www.cnblogs.com/yft-javaNotes/p/10213494.html
Copyright © 2020-2023  润新知