SprimgMVC學習筆記(五)—— Controller方法返回值
阿新 • • 發佈:2019-01-03
一、返回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指定響應結果
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"; }