天天看點

SpringMVC controller方法傳回值

1、傳回ModelAndView

controller方法中定義ModelAndView對象并傳回,對象中可添加model資料、指定view。

@Controller
public class ItemController {

	// @RequestMapping:裡面放的是請求的url,和使用者請求的url進行比對
	// action可以寫也可以不寫
	@RequestMapping("/itemList.action")
	public ModelAndView queryItemList() {
		// 建立頁面需要顯示的商品資料
		List<Item> list = new ArrayList<>();
		list.add(new Item(1, "1華為 榮耀8", 2399, new Date(), "品質好!1"));
		list.add(new Item(2, "2華為 榮耀8", 2399, new Date(), "品質好!2"));
		list.add(new Item(3, "3華為 榮耀8", 2399, new Date(), "品質好!3"));
		list.add(new Item(4, "4華為 榮耀8", 2399, new Date(), "品質好!4"));
		list.add(new Item(5, "5華為 榮耀8", 2399, new Date(), "品質好!5"));
		list.add(new Item(6, "6華為 榮耀8", 2399, new Date(), "品質好!6"));

		// 建立ModelAndView,用來存放資料和視圖
		ModelAndView modelAndView = new ModelAndView();
		// 設定資料到模型中
		modelAndView.addObject("list", list);
		// 設定視圖jsp,需要設定視圖的實體位址
		modelAndView.setViewName("/WEB-INF/jsp/itemList.jsp");

		return modelAndView;
	}
}
           

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

3、傳回字元串

3.1 邏輯視圖名:controller方法傳回字元串可以指定邏輯視圖名,通過視圖解析器解析為實體視圖位址。

//指定邏輯視圖名,經過視圖解析器解析為jsp實體路徑:/WEB-INF/jsp/itemList.jsp
return "itemList";
           

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方法

/**
 * 更新商品
 * 
 * @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";
           

繼續閱讀