1. 程式人生 > >SprimgMVC學習筆記(五)—— Controller方法返回值

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

}