SpringMVC_04 數據處理模型 ModeAndView、Map及Model、@SessionAttributes、@ModelAttribute、@SessionAttributes

一、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;
	}
本人初學
歡迎指點
有問題可私信或評論
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章