日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringMVC 学习系列 (4) 之 数据绑定 -1

發布時間:2025/1/21 javascript 95 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC 学习系列 (4) 之 数据绑定 -1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

在系列(3)中我們介紹了請求是如何映射到一個action上的,下一步當然是如何獲取到請求中的數據,這就引出了本篇所要講的內容—數據綁定。

首先看一下都有哪些綁定數據的注解:

1.@RequestParam,綁定單個請求數據,可以是URL中的數據,表單提交的數據或上傳的文件;?
2.@PathVariable,綁定URL模板變量值;?
3.@CookieValue,綁定Cookie數據;?
4.@RequestHeader,綁定請求頭數據;?
5.@ModelAttribute,綁定數據到Model;?
6.@SessionAttributes,綁定數據到Session;?
7.@RequestBody,用來處理Content-Type不是application/x-www-form-urlencoded編碼的內容,例如application/json, application/xml等;?
8.@RequestPart,綁定“multipart/data”數據,并可以根據數據類型進項對象轉換;

下面我們來看如何使用:

1.@RequestParam:

為了驗證文件綁定我們需要先做以下工作:

a.把commons-fileupload-1.3.1.jar和commons-io-2.4.jar兩個jar包添加到我們項目。

b.配置我們項目中的springservlet-config.xml文件使之支持文件上傳,內容如下:

<!-- 支持上傳文件 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 設置上傳文件的最大尺寸為1MB --> <property name="maxUploadSize"> <value>1048576</value> </property><property name="defaultEncoding"> <value>UTF-8</value> </property> </bean>

其中maxUploadSize用于限制上傳文件的最大大小,也可以不做設置,這樣就代表上傳文件的大小木有限制。defaultEncoding用于設置上傳文件的編碼格式,用于解決上傳的文件中文名亂碼問題。

下面就看具體如何使用:

添加一個DataBindController,里面有2個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 urlParam1 = ServletRequestUtils.getStringParameter(request, "urlParam", null);String formParam1 = ServletRequestUtils.getStringParameter(request, "formParam", null);MultipartFile formFile1 = ((MultipartHttpServletRequest) request).getFile("formFile"); ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("urlParam", urlParam); modelAndView.addObject("formParam", formParam); modelAndView.addObject("formFileName", formFile.getOriginalFilename()); modelAndView.addObject("urlParam1", urlParam1); modelAndView.addObject("formParam1", formParam1); modelAndView.addObject("formFileName1", formFile1.getOriginalFilename()); modelAndView.setViewName("parambindresult"); return modelAndView;}}

在views文件夾中添加parambind.jsp和parambindresult.jsp兩個視圖,內容分別如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body><form action="parambind?urlParam=AAA" method="post" enctype="multipart/form-data"> <input type="text" name="formParam" /><br/> <input type="file" name="formFile" /><br/><input type="submit" value="Submit" /></form> </body> </html> <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body>自動綁定數據:<br/><br/>${urlParam}<br/>${formParam}<br/>${formFileName}<br/><br/><br/><br/>手動獲取數據:<br/><br/>${urlParam1}<br/>${formParam1}<br/>${formFileName1}<br/> </body> </html>

運行項目,輸入內容,選擇上傳文件:

提交查看結果:

可以看到綁定的數據已經獲取到了。

上面我們演示了如何把數據綁定到單個變量,但在實際應用中我們通常需要獲取的是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里面添加2個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 2個視圖用于提交數據和展示提交的數據:

modelautobind.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body><form:form modelAttribute="accountmodel" method="post"> 用戶名:<form:input path="username"/><br/>密 碼:<form:password path="password"/><br/><input type="submit" value="Submit" /></form:form> </body> </html>

modelautobindresult.jsp :

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body>用戶名:${accountmodel.username}<br/>密 碼:${accountmodel.password} </body> </html>

運行測試:

用戶名 輸入AAA 密碼 輸入BBB,提交:

可以看到結果顯示正確,說明自動綁定成功。

注:

1.關于@RequestParam的參數,這是一個@RequestParam的完整寫法@RequestParam(value="username", required=true, defaultValue="AAA")。

value表示要綁定請求中參數的名字;

required表示請求中是否必須有這個參數,默認為true這是如果請求中沒有要綁定的參數則返回404;

defaultValue表示如果請求中指定的參數值為空時的默認值;

要綁定的參數如果是值類型必須要有值否則拋異常,如果是引用類型則默認為null(Boolean除外,默認為false);

?

2.在剛才添加的2個action中可以看到返回類型和以前的不一樣了由ModelAndView變成了String,這是由于Spring MVC 提供Model、ModelMap、Map讓我們可以直接添加渲染視圖需要的模型數據,在返回時直接指定對應視圖名稱就可以了。同時Map是繼承于ModelMap的,而Model和ModelMap是繼承于ExtendedModelMap的。

?

3.在剛才添加的視圖modelautobind.jsp中可以看到<form:form<form:input?等標簽,這是Spring MVC提供的表單標簽,借助于這些標簽我們可以很方便的把模型數據綁定到表單上面(當然你也可以選擇繼續使用原生的HTML表單標簽),要使用Spring MVC只要在視圖中添加引用?<%@ taglib prefix="form"?uri="http://www.springframework.org/tags/form"?%>即可,關于Spring MVC表單標簽的具體內容會在以后的文章中作介紹。

?

轉載于:https://my.oschina.net/gaoguofan/blog/753237

總結

以上是生活随笔為你收集整理的SpringMVC 学习系列 (4) 之 数据绑定 -1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。