zoukankan      html  css  js  c++  java
  • Controller方法返回值

    1. 返回ModelAndView

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

             //入门程序 第一   包类 + 类包 + 方法名
    
             @RequestMapping(value = "/item/itemlist.action")
    
             public ModelAndView itemList(){
    
                      
    
                       // 创建页面需要显示的商品数据
    
                       List<Items> list = new ArrayList<Items>();
    
                       list.add(new Items(1, "1华为 荣耀8", 2399f, new Date(), "质量好!1"));
    
                       list.add(new Items(2, "2华为 荣耀8", 2399f, new Date(), "质量好!2"));
    
                       list.add(new Items(3, "3华为 荣耀8", 2399f, new Date(), "质量好!3"));
    
                       list.add(new Items(4, "4华为 荣耀8", 2399f, new Date(), "质量好!4"));
    
                       list.add(new Items(5, "5华为 荣耀8", 2399f, new Date(), "质量好!5"));
    
                       list.add(new Items(6, "6华为 荣耀8", 2399f, new Date(), "质量好!6"));
    
                      
    
                       ModelAndView mav = new ModelAndView();
    
                       //数据,也就是跳转到下面的页面时候显示的页面
    
                       mav.addObject("itemList", list);
    
                       mav.setViewName("/WEB-INF/jsp/itemList.jsp");
    
                       return mav;
    
             }

    参考http://www.cnblogs.com/qlqwjy/p/7214231.html

    2. 返回void

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

    1、使用request转发页面,如下:

    request.getRequestDispatcher("页面路径").forward(request, response);

    request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response);

    2、可以通过response页面重定向:

    response.sendRedirect("url")

    response.sendRedirect("/springmvc-web2/itemEdit.action");

    3、可以通过response指定响应结果,例如响应json数据如下:

    response.getWriter().print("{"abc":123}");

    (1) 代码演示

    以下代码一次测试,演示上面的效果

    /**
     * 返回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. 返回字符串

    3.1. 逻辑视图名

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

    //指定逻辑视图名,经过视图解析器解析为jsp物理路径:/WEB-INF/jsp/itemList.jsp
    
    return "itemList";

    例如:

    /**
     * 根据id查询商品,使用ModelMap
     * 
     * @param request
     * @param model
     * @return
     */
    @RequestMapping("/itemEdit")
    public String queryItemById(HttpServletRequest request, ModelMap model) {
        // 从request中获取请求参数
        String strId = request.getParameter("id");
        Integer id = Integer.valueOf(strId);
    
        // 根据id查询商品数据
        Item item = this.itemService.queryItemById(id);
    // 把商品数据放在模型中
        model.addAttribute("item", item);
    
        return "itemEdit";
    }
    /**
     * 包装类型 绑定数组类型,可以使用两种方式,pojo的属性接收,和直接接收
     * 
     * @param queryVo
     * @return
     */
    @RequestMapping("queryItem")
    public String queryItem(QueryVo queryVo, Integer[] ids) {
    
        System.out.println(queryVo.getItem().getId());
        System.out.println(queryVo.getItem().getName());
    
        System.out.println(queryVo.getIds().length);
        System.out.println(ids.length);
    
        return "success";
    }

    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,所以之前的请求参数都会丢失
    
        // 如果要指定请求参数,需要在重定向的url后面添加 ?itemId=1 这样的请求参数
    
        // return "redirect:/itemEdit.action?itemId=" + item.getId();
    
     
    
        // 修改商品成功后,继续执行另一个方法
    
        // 使用转发的方式实现。转发后浏览器地址栏还是原来的请求地址,
    
        // 转发并没有执行新的request和response,所以之前的请求参数都存在
    
        return "forward:/itemEdit.action";
    
     
    
    }

    //结果转发到editItem.action,request可以带过去

    return "forward: /itemEdit.action";

    需要修改之前编写的根据id查询商品方法

    因为请求进行修改商品时,请求参数里面只有id属性,没有itemId属性

    修改,如下图::

  • 相关阅读:
    不要对春运抱有幻想
    初识HTTP消息头(一)
    java中ArrayList 、LinkList区别以及速度对比
    jar包和war包的区别
    LUA 日期处理
    NGINXLUA——变量浅谈
    JDK和JRE的区别
    理解HTTP消息头 (五)——使用multipart/formdata上传文件
    安装Jetty
    TOMCATJARWAR事例讲解
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/8519379.html
Copyright © 2011-2022 走看看