在系列(SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1)中我們介紹了請求是如何映射到一個action上的,下一步當然是如何獲取到請求中的數據,這就引出了本篇所要講的內容—數據綁定。
首先看一下都有哪些綁定數據的註解:
SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.@RequestParam,綁定單一請求數據,可以是URL中的數據,表單提交的數據或上傳的文件;
SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.@PathVariable,綁定URL範本變數值;
SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.@CookieValue,綁定Cookie資料;
SpringMVC學習系列(4) 之 資料綁定-1.@RequestHeader,綁定請求頭資料;
#5.@ModelAttribute ,綁定資料到Model;
6.@SessionAttributes,綁定資料到Session;
7.@RequestBody,用來處理Content-Type不是application/x-www-form-urlencoded編碼的內容,例如application/json, application/xml等;
8.@RequestPart,綁定「multipart/data」數據,並可以根據資料型別進項物件轉換;
在下面我們來看如何使用:
SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.@RequestParam:
為了驗證檔案綁定我們需要先做以下工作:
a.把commons-fileupload-SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.jar和commons-io- SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.SpringMVC學習系列(4) 之 資料綁定-1.jar兩個jar包加入到我們專案。
b.設定我們專案中的springservlet-config.xml檔案使其支援檔案上傳,內容如下:
<!-- 支持上传文件 --> <bean> <!-- 设置上传文件的最大尺寸为SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1MB --> <property> <value>SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-10SpringMVC學習系列(4) 之 資料綁定-18576</value> </property> <property> <value>UTF-8</value> </property></bean>
maxUploadSize用來限制上傳檔案的最大大小,也可以不做設置,這樣就代表上傳檔案的大小木有限制。 defaultEncoding用於設定上傳檔案的編碼格式,用於解決上傳的檔案中文名亂碼問題。
下面就看具體如何使用:新增一個DataBindController,裡面有SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1個paramBind的action分別對應get和post請求:package com.demo.web.controllers;import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;import org.springframework.web.bind.ServletRequestUtils;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping(value = "/databind")public class DataBindController { @RequestMapping(value="/parambind", method = {RequestMethod.GET}) public ModelAndView paramBind(){ ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("parambind"); return modelAndView; } @RequestMapping(value="/parambind", method = {RequestMethod.POST}) public ModelAndView paramBind(HttpServletRequest request, @RequestParam("urlParam") String urlParam, @RequestParam("formParam") String formParam, @RequestParam("formFile") MultipartFile formFile){ //如果不用注解自动绑定,我们还可以像下面一样手动获取数据 String urlParamSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1 = ServletRequestUtils.getStringParameter(request, "urlParam", null); String formParamSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1 = ServletRequestUtils.getStringParameter(request, "formParam", null); MultipartFile formFileSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1 = ((MultipartHttpServletRequest) request).getFile("formFile"); ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("urlParam", urlParam); modelAndView.addObject("formParam", formParam); modelAndView.addObject("formFileName", formFile.getOriginalFilename()); modelAndView.addObject("urlParamSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1", urlParamSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1); modelAndView.addObject("formParamSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1", formParamSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1); modelAndView.addObject("formFileNameSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1", formFileSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.getOriginalFilename()); modelAndView.setViewName("parambindresult"); return modelAndView; } }
nbsp;html PUBLIC "-//WSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1C//DTD HTML SpringMVC學習系列(4) 之 資料綁定-1.0SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1 Transitional//EN" "http://www.wSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.org/TR/htmlSpringMVC學習系列(4) 之 資料綁定-1/loose.dtd"><meta><title>Insert title here</title>
nbsp;html PUBLIC "-//WSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1C//DTD HTML SpringMVC學習系列(4) 之 資料綁定-1.0SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1 Transitional//EN" "http://www.wSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.org/TR/htmlSpringMVC學習系列(4) 之 資料綁定-1/loose.dtd"><meta><title>Insert title here</title> 自动绑定数据:
${urlParam}
${formParam}
${formFileName}
手动获取数据:
${urlParamSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1}
${formParamSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1}
${formFileNameSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1}
可以看到綁定的資料已經取得到了。 上面我們示範如何把資料綁定到單一變量,但在實際應用中我們通常需要取得的是model對象,別擔心,我們不需要把資料綁定到一個個變數然後在對model賦值,只要把model加入對應的action參數(這裡不需要指定綁定資料的註解)Spring MVC會自動進行資料轉換並綁定到model物件上,一切就是這麼簡單。測試如下:
添加一个AccountModel类作为测试的model:
package com.demo.web.models;public class AccountModel { private String username; private String password; public void setUsername(String username){ this.username=username; } public void setPassword(String password){ this.password=password; } public String getUsername(){ return this.username; } public String getPassword(){ return this.password; } }
在DataBindController里面添加SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1个modelAutoBind的action分别对应get和post请求:
@RequestMapping(value="/modelautobind", method = {RequestMethod.GET})public String modelAutoBind(HttpServletRequest request, Model model){ model.addAttribute("accountmodel", new AccountModel()); return "modelautobind"; } @RequestMapping(value="/modelautobind", method = {RequestMethod.POST})public String modelAutoBind(HttpServletRequest request, Model model, AccountModel accountModel){ model.addAttribute("accountmodel", accountModel); return "modelautobindresult"; }
在views文件夹中添加modelautobind.jsp和modelautobindresult.jsp SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1个视图用于提交数据和展示提交的数据:
modelautobind.jsp:
nbsp;html PUBLIC "-//WSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1C//DTD HTML SpringMVC學習系列(4) 之 資料綁定-1.0SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1 Transitional//EN" "http://www.wSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.org/TR/htmlSpringMVC學習系列(4) 之 資料綁定-1/loose.dtd"><meta><title>Insert title here</title>
modelautobindresult.jsp :
nbsp;html PUBLIC "-//WSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1C//DTD HTML SpringMVC學習系列(4) 之 資料綁定-1.0SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1 Transitional//EN" "http://www.wSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.org/TR/htmlSpringMVC學習系列(4) 之 資料綁定-1/loose.dtd"><meta><title>Insert title here</title> 用户名:${accountmodel.username}
密 码:${accountmodel.password}
运行测试:
用户名 输入AAA 密码 输入BBB,提交:
可以看到结果显示正确,说明自动绑定成功。
注:
SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.关于@RequestParam的参数,这是一个@RequestParam的完整写法@RequestParam(value="username", required=true, defaultValue="AAA")。
value表示要绑定请求中参数的名字;
required表示请求中是否必须有这个参数,默认为true这是如果请求中没有要绑定的参数则返回SpringMVC學習系列(4) 之 資料綁定-10SpringMVC學習系列(4) 之 資料綁定-1;
defaultValue表示如果请求中指定的参数值为空时的默认值;
要绑定的参数如果是值类型必须要有值否则抛异常,如果是引用类型则默认为null(Boolean除外,默认为false);
SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.在刚才添加的SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1个action中可以看到返回类型和以前的不一样了由ModelAndView变成了String,这是由于Spring MVC 提供Model、ModelMap、Map让我们可以直接添加渲染视图需要的模型数据,在返回时直接指定对应视图名称就可以了。同时Map是继承于ModelMap的,而Model和ModelMap是继承于ExtendedModelMap的。
SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.在剛剛新增的檢視modelautobind.jsp中可以看到form:form、form:input 等標籤,這是Spring MVC提供的表單標籤,借助於這些標籤我們可以很方便的把模型資料綁定到表單上面(當然你也可以選擇繼續使用原生的HTML表單標籤),要使用Spring MVC只要在檢視中加入引用 @ taglib prefix="##form#" uri="#http://www.php.cn/" %>即可,關於Spring MVC表單標籤的具體內容會在以後的文章中作介紹。
以上就是SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之資料綁定-SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1的內容,更多相關內容請關注PHP中文網(www. php.cn)!
#