ModelAttribute的使用 關於請求引數和URL模板
@ModelAttribute 繫結請求引數到命令物件
@ModelAttribute一個具有如下三個作用:
①繫結請求引數到命令物件:放在功能處理方法的入參上時,用於將多個請求引數繫結到一個命令物件,從而簡化綁
定流程,而且自動暴露為模型資料用於檢視頁面展示時使用;
②暴露表單引用物件為模型資料:放在處理器的一般方法(非功能處理方法)上時,是為表單準備要展示的表單引用
物件,如註冊時需要選擇的所在城市等,而且在執行功能處理方法(@RequestMapping 註解的方法)之前,自動新增
到模型物件中,用於檢視頁面展示時使用;
③暴露@RequestMapping 方法返回值為模型資料:放在功能處理方法的返回值上時,是暴露功能處理方法的返回值為
模型資料,用於檢視頁面展示時使用。
一、繫結請求引數到指定物件
Java程式碼- public String test1(@ModelAttribute("user") UserModel user)
如請求引數包含“?username=zhang&password=123&workInfo.city=bj”自動繫結到user 中的workInfo屬性的city屬性中。
- @RequestMapping(value="/model2/{username}")
- public String test2(@ModelAttribute("model") DataBinderTestModel model)
二、暴露表單引用物件為模型資料
Java程式碼- /**
- * 設定這個註解之後可以直接在前端頁面使用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頁面展示出來
Java程式碼- <br>
- 初始化的資料 : ${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'}">
- 網球<input type="checkbox" name="hobbies" value="tennis">
- </c:when>
- </c:choose>
- </c:forEach>
備註:
1、通過上面這種方式可以顯示出一個集合的內容
2、上面的jsp程式碼使用的是JSTL,需要匯入JSTL相關的jar包
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
三、暴露@RequestMapping方法返回值為模型資料
Java程式碼- public @ModelAttribute("user2") UserModel test3(@ModelAttribute("user2") UserModel user)
大家可以看到返回值型別是命令物件型別,而且通過@ModelAttribute("user2")註解,此時會暴露返回值到模型資料( 名字為user2 ) 中供檢視展示使用
@ModelAttribute 註解的返回值會覆蓋@RequestMapping 註解方法中的@ModelAttribute 註解的同名命令物件