一、ModelAndView
在控制器的目標方法中返回 ModelAndView
/**
* 目標方法的返回值可以是 ModelAndView 類型
* 其中可以包含視圖和模型信息
* SpringMVC 會吧 ModelAndView 的 model 中的數據放入到 request 域對象中
*/
@RequestMapping("/testModelAndView")
private ModelAndView testModelAndView(){
String viewName = SUCCESS;
ModelAndView mv = new ModelAndView(viewName);
//添加模型數據到 ModelAndView 中,
mv.addObject("time", new Date());
return mv;
}
在跳轉頁面上從請求域獲取數據模型信息
time: ${requestScope.time }
URL請求:
<a href="springmvc/testModelAndView">testModelAndView</a>
<br><br>
二、Map
開控制器的目標方法中可以添加Map類型的參數,數據將存儲到請求域
@RequestMapping("/testMap")
private String testMap(Map<String, Object> map){
System.out.println(map.getClass().getName());
map.put("names", Arrays.asList("Tom", "Jake", "Mari"));
return SUCCESS;
}
在成功跳轉頁面顯示Map的值:
names:${requestScope.names }
URL請求:
<a href="springmvc/testMap">testMap</a>
<br><br>
三、SessionAttributes註解
在前兩個處理模型方法中,都是將數據存儲到請求域中,而使用@SessionAttributes註解能夠將數據存儲到 Session 域和request域中
@SessionAttributes(value={"user"}, types={String.class})
@Controller
@RequestMapping("/springmvc")
public class SpringMVCTest {
private static final String SUCCESS = "success";
/**
* @SessionAttributes 除了可以通過屬性名指定需要放到會話中的屬性外(實際上是使用 value 屬性值),
* 還可以通過模型屬性的對象類型指定哪些模型屬性需要放到會話中(實際上是使用 types 屬性值)
*
* 注意:該註解只能放在類的上面,而不能修飾方法
*/
@RequestMapping("/testSessionAttributes")
private String testSessionAttribures(Map<String, Object> map){
User user = new User("aaa", 20);
map.put("user", user);
map.put("str", "aaaaaaaaa");
return SUCCESS;
}
}
在跳轉頁面顯示存儲在session中的數據:
request: ${requestScope.user }<br>
session: ${sessionScope.user }
<br><br>
request: ${requestScope.str}<br>
session: ${sessionScope.str}
URL請求:
<a href="springmvc/testSessionAttributes">testSessionAttributes</a>
<br><br>