Spring MVC學習(四) 處理資料模型
Spring MVC提供了以下幾種方式輸出模型資料:
1.使用ModelAndView輸出模型資料,程式碼如下:
<a href="TestRequestMapping/TestModelAndView">TestModelAndView</a>
/**
* 使用ModelAndView處理模型資料
* 該方法的返回值型別是ModelAndView型別,其中包含了檢視和資料模型資訊
* Spring MVC會把ModelAndView中Model中的資料放到request域物件中
* @return
*/
@RequestMapping ("TestModelAndView")
public ModelAndView testModelAndView()
{
String viewName="success";
ModelAndView modelAndView=new ModelAndView(viewName);
//將模型資料新增到ModelAndView中
modelAndView.addObject("time", new Date());
return modelAndView;
}
2.使用map作為方法的入參處理資料模型:
<a href="TestRequestMapping/TestMap">TestMap</a>
/**
* 使用map作為方法的入參處理資料模型
* map中的資料也會被放到目標頁面的請求域物件中
* @param map
* @return
*/
@RequestMapping("TestMap")
public String testMap(Map<String, Object> map)
{
map.put("name", "Tom");
return "success";
}
3.使用@SessionAttributes將模型資料放入Session域物件中:
首先在控制器類的上邊新增一個@SessionAttributes註解
@SessionAttributes(value={"user"})
其中value=“xxx”表示將名為xxx的模型資料放入Session域物件中
接下來上程式碼
<a href="TestRequestMapping/TestSessionAttributes">TestSessionAttributes</a>
/**
* @SessionAttributes除了可以通過屬性名指定需要放到會話中的屬性外(使用value屬性),
* 還可以通過模型屬性的物件型別來指定哪些模型屬性需要放到會話中(使用types屬性)
* 該註解只能放在類上邊不能放在方法上邊
* @param map
* @return
*/
@RequestMapping("TestSessionAttributes")
public String testSessionAttributes(Map<String, Object> map)
{
User user=new User();
user.setUserName("zhangsan");
user.setAge(21);
user.setEmail("[email protected]");
map.put("user", user);
return "success";
}
[email protected]註解(較難理解)
由於該例子較難理解,我自己也不是太懂,因此暫且先記下
<form action="TestRequestMapping/TestModelAttribute" method="post">
username:<input type="text" name="userName" value="Tom">
<br>
id:<input type="text" name="id" value="1">
<br>
email:<input type="text" name="email" value="[email protected]">
<br>
age:<input type="text" name="age" value="12">
<br>
<input type="submit" value="Submit">
</form>
/**
* 執行流程:
* 1.執行@ModelAttribute修飾的方法:從資料庫中取出物件,並放入Map中,鍵為user
* 2.Spring MVC從Map中取出User物件,並把表單請求引數賦給該User物件的對應屬性
* 3.Spring MVC把上述物件傳入到目標方法的引數中
* @param user
* @return
*/
@RequestMapping("TestModelAttribute")
public String testModelAttribute(User user)
{
System.out.println("修改:"+user);
return "success";
}
/**
* 具有@ModelAttribute的方法在任何目標方法被呼叫之前被SpringMVC呼叫
* @param id
* @param map
*/
@ModelAttribute
public void getUser(@RequestParam(value="id",required=false) Integer id,
Map<String,Object> map)
{
if(id!=null)
{
//模擬從資料庫中取出一個id為1的物件
User user =new User(1, "Tom","123456", "[email protected]", 12);
map.put("user", user);
}
}
接下來寫一些通過原始碼分析的結論,由於自己還不是很理解,因此暫且直接將結論記下:
Spring MVC確定目標方法POJO型別入參的過程
1.確定一個key
(1)若目標方法的型別引數沒有使用@ModelAttribute作為修飾,則key為POJO類名的第一個字母小寫
(2)若使用了@ModelAttribute作為修飾,則key為@ModelAttribute註解的value屬性值
2.在implicitModel中查詢key對應的的物件,若存在,則作為入參
(1)若在@ModelAttribute標記的方法中在Map中儲存過,且key和1確定的key一致,則會獲取到
3.在implicitModel查詢key對應的物件,若不存在,則檢查當前的Handler是否使用了@SessionAttributes註解修飾,若使用了該註解,且SeesionAttributes中的value值中包含了key,則從HttpSession中獲取key所對應的value,若存在則作為入參傳入目標方法,若不存在則丟擲異常
4.若Handler沒有表示@SessionAttributes註解,或者@SessionAttributes註解中的value不包含key,則會通過反射機制建立POJO物件傳入為目標方法的引數
5.SpringMVC會把key和POJO型別儲存到implicitModel中,進而儲存到request域中
相關推薦
Spring MVC學習(四) 處理資料模型
Spring MVC提供了以下幾種方式輸出模型資料: 1.使用ModelAndView輸出模型資料,程式碼如下: <a href="TestRequestMapping/TestModelAndView">TestModelAndView<
SpringMVC 學習(四)——處理模型資料
處理模型資料 •Spring MVC 提供了以下幾種途徑輸出模型資料: –ModelAndView: 處理方法返回值類型為 ModelAndView 時, 方法體即可通過該對象新增模型資料 –Map 及 Model: 入參為 org.springframework.ui.Mode
python資料分析pandas包入門學習(四)處理缺失資料
本文參考《利用Python進行資料分析》的第五章 pandas入門 4 處理缺失資料 缺失資料(missing data)在大部分資料分析應用中都很常見。Pandas的設計目標之一就是讓缺失資料的處理任務儘量輕鬆。例如,pandas物件上的所有描述統計都排除了缺失資料
Spring MVC系列(四)之session處理[email
介紹 在web開發中,session的重要性不言而喻,與cookie相比,session更加安全,處於伺服器端,開發者經常把一些重要的資訊放在session,方便在多次請求中方便的獲取資訊,Spring MVC 對session的支援也依舊很強大很靈活 Sp
Spring Boot學習(四)
自動配置 pat xml配置 XML 入口 spa ges auto classpath @SpringBootApplication 每一個Spring Boot項目都有一個名為*Application的入口類,入口類中有個main方法,在main方法中使用: Sprin
Spring MVC學習(三)
新建一個web project專案 嚴重: Context initialization failed org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML docum
Spring Boot學習(四):使用@SpringBootTest註解進行單元測試
一、簡介 專案中經常會遇到需要單元測試的情況,那麼SpringBoot如何實現這種需求,使用@SpringBootTest註解可以執行環境,測試後臺程式碼。 二、環境準備 eclipse + maven + Spring Boot 三、程式碼示例 pom.xml
Spring的學習(四):Web中的Spring
Spring通常用來開發Web應用。 SpringMVC的執行過程: 我們可以從以下的圖來分析SpringMVC的的執行過程。 1、客戶端在傳送請求的時候,會呼叫DispatcherServlet,Dispatch是SpringMVC的入口,Dispatche
Spring Boot——Spring回顧——Spring MVC基礎(四)高階配置
檔案上傳配置 上傳頁面 新增轉向到upload頁面的ViewController MultipartResolver配置 控制器 伺服器端推送技術 SSE 演示控制器 演示頁面 配置 Servlet 3.0+非同步方法處理
Spring MVC學習(一)
新建一個web project專案,專案名字為springMvc 導包 Controller類的實現 HelloMvc類實現了Controller介面 package cn.controller; import javax.servlet.http.Http
Spring MVC學習(二)
上一個專案,新建一個類 程式碼 package cn.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotati
zookeeper學習系列(四)zookeeper資料模型
本文主要講述ZooKeeper的資料模型,包括ZooKeeper的資料檢視,節點的層次結構以及節點型別等基本屬性。Zookeeper的檢視結構類似標準的Unix檔案系統,但是沒有引入檔案系統相關概念
Spring Cloud學習(四)Zuul過濾器詳解
轉載自:http://www.itmuch.com/spring-cloud/zuul/spring-cloud-zuul-filter/ http://blog.didispace.com/spring-cloud-zuul-exception-2/ http://blog
Spring Boot 學習 (四)自定義 Banner
SpringBoot應用程式啟動過程中,都會預設在控制檯輸出上圖所顯示的內容,即是我們本篇文章所說的Banner。 當然,SpringBoot 提供了預設的Banner之外,也提供了自定義設定Banner的功能。 1、自定義Banner內容 自定義Banner很簡單
Spring MVC 系列(四)——Spring MVC 與Ajax互動及重定向操作
一、Spring MVC 與Ajax互動 一般情況下,Controller中方法返回值型別有兩種 1、String 直接跳轉到某View介面 2、Void 不需要進行頁面跳轉,直接訪問下一個方法
redis學習(四)——Hash資料型別
一、概述 我們可以將Redis中的Hash型別看成具有String Key和String Value的map容器。所以該型別非常適合於儲存值物件的資訊。如Username、Password和Age等。如果Hash中包含很少的欄位,那麼該型別的資料也將僅佔用很少的磁碟
Spring原始碼學習(四)在單值注入時如何按型別查詢匹配的Bean
前3篇blog的地址: 1.Spring原始碼學習(-)別怕,老外點中餐與AbstractBeanFactory.getBean的主流程差不多 2.Spring原始碼學習(二)哎呦,按菜譜做菜與AbstractAutowireCapableBeanFactory.createBean流程差不多 3.prin
TensorFlow 學習(四) 線性迴歸模型
線性迴歸演算法的主要優點是它的簡單性,線性迴歸的損失函式是平方損失。一般處理連續性問題,比如預測房價等,在本文中,使用 TensorFlow 訓練一個簡單線性迴歸模型。 線性迴歸模型 y = wx + b: 準備好特徵和目標值資料集 import tensorflow as tf i
機器學習(四)邏輯迴歸模型訓練
本篇不講演算法 只講用Python (pandas, matplotlib, numpy, sklearn) 進行訓練的一些要點 1.合併index np.concatenate([index1,index2]) 2.from sklearn.cross_va
pandas 學習(四)—— 資料處理(清洗)、缺失值的處理
建立 DataFrame: df = pd.DataFrame(np.random.randint(0, 10, (2, 4)), columns=list('ABCD')) 0. 為 da