標(biāo)簽(空格分隔): SpringMVC
@ModelAttribute一個具有如下三個作用:
- 綁定請求參數(shù)到命令對象:放在功能處理方法的入?yún)⑸蠒r,用于將多個請求參數(shù)綁定到一個命令對象,從而簡化綁定流程,而且自動暴露為模型數(shù)據(jù)用于視圖頁面展示時使用
- 暴露表單引用對象為模型數(shù)據(jù):放在處理器的一般方法(非功能處理方法)上時,是為表單準(zhǔn)備要展示的表單引用對象,如注冊時需要選擇的所在城市等,而且在執(zhí)行功能處理方法(@RequestMapping 注解的方法)之前,自動添加到模型對象中,用于視圖頁面展示時使用
- 暴露@RequestMapping方法返回值為模型數(shù)據(jù):放在功能處理方法的返回值上時,是暴露功能處理方法的返回值為模型數(shù)據(jù),用于視圖頁面展示時使用。
綁定請求參數(shù)到指定對象
public String test1(@ModelAttribute("user") UserModel user)
只是此處多了一個注解@ModelAttribute("user"),它的作用是將該綁定的命令對象以“user”為名稱添加到模型對象中供視圖頁面展示使用。我們此時可以在視圖頁面使用${user.username}來獲取綁定的命令對象的屬性。
綁定請求參數(shù)到命令對象支持對象圖導(dǎo)航式的綁定,如請求參數(shù)包含“?username=zhang&password=123&workInfo.city=bj”自動綁定到user中的workInfo屬性的city屬性中。
暴露表單引用對象為模型數(shù)據(jù)
/**
* 設(shè)置這個注解之后可以直接在前端頁面使用hb這個對象(List)集合
* @return
*/
@ModelAttribute("hb")
public List<String> hobbiesList(){
List<String> hobbise = new LinkedList<String>();
hobbise.add("basketball");
hobbise.add("football");
hobbise.add("tennis");
return hobbise;
}
JSP頁面展示出來
<br>
初始化的數(shù)據(jù) :${hb }
<br>
<c:forEach items="${hb}" var="hobby" varStatus="vs">
<c:choose>
<c:when test="${hobby == 'basketball'}">
籃球<input type="checkbox" name="hobbies" value="basketball">
</c:when>
<c:when test="${hobby == 'football'}">
足球<input type="checkbox" name="hobbies" value="football">
</c:when>
<c:when test="${hobby == 'tennis'}">
網(wǎng)球<input type="checkbox" name="hobbies" value="tennis">
</c:when>
</c:choose>
</c:forEach>
暴露@RequestMapping方法返回值為模型數(shù)據(jù)
public @ModelAttribute("user2") UserModel test3(@ModelAttribute("user2") UserModel user)
大家可以看到返回值類型是命令對象類型,而且通過@ModelAttribute("user2")注解,此時會暴露返回值到模型數(shù)據(jù)( 名字為user2 ) 中供視圖展示使用
@ModelAttribute 注解的返回值會覆蓋@RequestMapping 注解方法中的@ModelAttribute 注解的同名命令對象