一、ModeAndView:
目標方法返回值類型可以是ModelAndView類型其中可以包含視圖和模型信息。
SpringMVC 會把ModelAndView的model中數據放到request域對象中。
二、Map及Model:
入參爲org.springframework.ui.model、org.springframework.ui.ModelMap
或 java.uti.Map時,在處理方法返回時,Map中的數據會自動添加到模型中。
三、@SessionAttributes:
--此註解只能放在類上
--通過制定屬性名放到會話中
--通過模型屬性的對象類型指定哪些模型屬性需要放到會話中
(實際上使用的是types屬性值)
--將模型中的某個屬性暫存到HttpSession中,
--以便多個請求之間可以共享這個屬性
四、@ModelAttribute:
--方法入參標註該註解後,入參的對象就會放到數據模型中
--用於修改對象時使用
--有@ModelAttribute標記的方法,會在每個目標方法執行之前被SpringMVC調用
--將數據從數據庫中取出 賦給對象 修改要修改的對象
運行流程:用戶填寫表單--------賦給對象-------傳入數據庫
1. 執行@ModelAttribute註解修飾的方法:
從數據庫中取出對象,把對象放入Map中。
2.SpringMVC從Map中取出User對象,並把錶帶請求的參數賦給該User對象的屬性
3.SpringMVC把上述對象傳入目標方法的參數
4.放到map中時的鍵需要和目標方法入參類型的第一個小寫的字符串一致
springMVC確定目標方法POJO類型入參的過程
1.確定一個key:
2.在implicitModel中查找key對應的對象,若存在,在作爲入參傳入
3.若implicitModel中不存在key對應的對象,則檢查當前handler是否使用
四、@SessionAttributes
註解修飾。
若使用了該註解,
且@SessionAttributes註解的value屬性值中包含了key,
則會從HttpSession中來獲取key所對應的value值。
若存在則直接傳入到目標方法的入參中。若不存在則拋出異常。
若Handler沒有標識@SessionAttributes註解或@SessionAttributes
註解的value值不包含key
,則會通過反射來創建POJO類型的參數,傳入目標方法的參數
SpringMVC會把key和value保存到implicitModel中進而會保存到request中
實例代碼:
@SessionAttributes(value={"user"}, types={String.class})
@RequestMapping("/springmvc")
@Controller
public class springMVCTest {
private static final String SUCCESS = "success";
@RequestMapping("/testViewAndViewResolver")
public String testViewAndViewResolver(){
System.out.println("testViewAndViewResolver");
return SUCCESS;
}
@ModelAttribute
public void getUser(@RequestParam(value="id", required=false) Integer id,
Map<String, Object> map){
if(id != null){
//模擬從數據庫中獲取對象
User user = new User(001, "sunqg", "123456", "[email protected]", 12);
System.out.println("從數據庫中獲取一個對象: " + user);
map.put("user", user);
}
}
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
System.out.println("修改: " + user);
return SUCCESS;
}
@RequestMapping("/testSessionAttributs")
public String testSessionAttributes(Map<String, Object> map){
User user = new User("Tom", "123456", "[email protected]", 15);
map.put("user", user);
map.put("school", "sycu");
return SUCCESS;
}
@RequestMapping("/testMap")
public String testMap(Map<String, Object> map){
map.put("names", Arrays.asList("Tom", "Jerry", "Mike"));
return SUCCESS;
}