Dans la série (Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2), nous avons présenté comment utiliser @RequestParam pour lier des données. Voyons comment utiliser d'autres annotations de liaison de données.
Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.@PathVariable est utilisé pour lier les valeurs des variables du modèle d'URL. Nous avons déjà présenté comment l'utiliser dans la série (Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2) et n'entrerons pas dans les détails ici.
Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.@CookieValue est utilisé pour lier les données dans Cookie. Ci-dessous, nous utilisons le sessionId dans le cookie pour les tests :
Ajoutez une action cookiebind dans DataBindController, le code est le suivant :
//@CookieValue Test@RequestMapping(value="/cookiebind", method = {RequestMethod.GET})public String cookieBind(HttpServletRequest request, Model model, @CookieValue(value="JSESSIONID", defaultValue="") String jsessionId){ model.addAttribute("jsessionId", jsessionId); return "cookiebindresult"; }
Ajoutez-le dans le dossier vues Une vue cookiebindresult.jsp, le code est le suivant :
nbsp;html PUBLIC "-//WSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2C//DTD HTML Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.0Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2 Transitional//EN" "http://www.wSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.org/TR/htmlSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2/loose.dtd"><meta><title>Insert title here</title> ${jsessionId}
Lancer le test :
Vous pouvez voir qu'il a été obtenu. Atteint l'ID de session.
Remarque : @CookieValue a également Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2 paramètres comme @RequestParam, et sa signification est la même que celle du paramètre @RequestParam.
Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.@RequestHeader est utilisé pour lier les données dans l'en-tête de la requête. Nous utilisons @RequestHeader pour obtenir l'agent utilisateur pour la démonstration :
Ajoutez une action requestheaderbind dans DataBindController, le code est le suivant. suit :
//@RequestHeader Test@RequestMapping(value="/requestheaderbind", method = {RequestMethod.GET})public String requestHeaderBind(HttpServletRequest request, Model model, @RequestHeader(value="User-Agent", defaultValue="") String userAgent){ model.addAttribute("userAgent", userAgent); return "requestheaderbindresult"; }
Ajoutez une vue requestheaderbindresult.jsp dans le dossier vues, le code est le suivant :
nbsp;html PUBLIC "-//WSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2C//DTD HTML Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.0Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2 Transitional//EN" "http://www.wSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.org/TR/htmlSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2/loose.dtd"><meta><title>Insert title here</title> ${userAgent}
Lancer le test :
Vous pouvez voir que le User-Agent a été obtenu.
Remarque : @RequestHeader a également Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2 paramètres comme @RequestParam, et sa signification est la même que celle du paramètre @RequestParam.
Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.@ModelAttribute lie les données au modèle. Dans l'action modelAutoBind de la série (Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2), le code pour ajouter les données soumises par le formulaire au Modèle est le suivant :
@RequestMapping(value="/modelautobind", method = {RequestMethod.POST})public String modelAutoBind(HttpServletRequest request, Model model, AccountModel accountModel){ model.addAttribute("accountmodel", accountModel); return "modelautobindresult"; }
Avec l'aide de @ModelAttribute nous pouvons parler des données plus simplement Ajoutez-le au Modèle et modifiez le code ci-dessus pour :
@RequestMapping(value="/modelautobind", method = {RequestMethod.POST})public String modelAutoBind(HttpServletRequest request, @ModelAttribute("accountmodel") AccountModel accountModel){ return "modelautobindresult"; }
Lancer le test :
Vous pouvez voir que le processus est toujours réussi. Les données soumises sont liées.
Série dapprentissage SpringMVC (5) Liaison de données-2. La portée des données dans le modèle est au niveau de la requête, ce qui signifie que dans une requête de requête, les données du modèle demandées par d'autres requêtes de requête ne peuvent pas être obtenues. Mais nous pouvons utiliser @SessionAttributes pour stocker des données dans la session afin de conserver les données entre plusieurs requêtes, afin de pouvoir mettre en œuvre des exigences telles que la soumission de formulaires par étapes. Voyons comment lier des données à AccountModel en Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2 étapes :
在DataBindController上添加:
@SessionAttributes(value = "sessionaccountmodel")
在DataBindController添加usernamebind和passwordbind action,代码如下:
//@SessionAttributes Test@ModelAttribute("sessionaccountmodel")public AccountModel initAccountModel(){ return new AccountModel(); } @RequestMapping(value="/usernamebind", method = {RequestMethod.GET})public String userNameBind( Model model, AccountModel accountModel){ model.addAttribute("sessionaccountmodel", new AccountModel()); return "usernamebind"; } @RequestMapping(value="/usernamebind", method = {RequestMethod.POST})public String userNameBindPost( @ModelAttribute("sessionaccountmodel") AccountModel accountModel){ //重定向到密码绑定测试 return "redirect:passwordbind"; } @RequestMapping(value="/passwordbind", method = {RequestMethod.GET})public String passwordBind(@ModelAttribute("sessionaccountmodel") AccountModel accountModel){ return "passwordbind"; } @RequestMapping(value="/passwordbind", method = {RequestMethod.POST})public String passwordBindPost(@ModelAttribute("sessionaccountmodel") AccountModel accountModel, SessionStatus status){ //销毁@SessionAttributes存储的对象 status.setComplete(); //显示绑定结果 return "sessionmodelbindresult"; }
由于我们在controller上指定了@SessionAttributes,所以在@ModelAttribute(“xxx”)注解的参数会直接在@SessionAttributes中查找名为”xxx”的对象,如果没有找到则调用@ModelAttribute(“xxx”)注解的方法返回对象并存入@SessionAttributes(如果没有找到且没有@ModelAttribute(“xxx”)注解的方法就会抛出HttpSessionRequiredException)。当执行到最后一步就可以调用SessionStatus .setComplete()方法把@SessionAttributes中保存对象销毁了(不会清除HttpSession中的数据)。
在views文件夹中添加usernamebind.jsp、passwordbind.jsp和sessionmodelbindresult.jsp视图内容分别如下:
nbsp;html PUBLIC "-//WSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2C//DTD HTML Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.0Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2 Transitional//EN" "http://www.wSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.org/TR/htmlSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2/loose.dtd"><meta><title>Insert title here</title> <form> 用户名:<input><br> <input> </form>
nbsp;html PUBLIC "-//WSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2C//DTD HTML Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.0Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2 Transitional//EN" "http://www.wSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.org/TR/htmlSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2/loose.dtd"><meta><title>Insert title here</title> <form> 密 码:<password></password><br> <input> </form>
nbsp;html PUBLIC "-//WSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2C//DTD HTML Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.0Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2 Transitional//EN" "http://www.wSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.org/TR/htmlSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2/loose.dtd"><meta><title>Insert title here</title> 用户名:${sessionaccountmodel.username}<br> 密 码:${sessionaccountmodel.password}
运行测试:
可以看到我们已经成功的分Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2步把数据绑定到AccountModel中了。
注:
@SessionAttributes有value和types两个参数其中value指明要对象的名称,types指定要绑定对象的类型,如@SessionAttributes(value = "sessionaccountmodel", types=AccountModel.class)两者是and关系,需要同时满足。也可以同时指定多个value和types 如:@SessionAttributes(value = {"aa", "aa"} , types={XXX.class, YYY.class}) 。
Série dapprentissage SpringMVC (5) Liaison de données-2.@RequestBody 调用合适的MessageConvert来把非application/x-www-form-urlencoded请求中的内容转换为指定的对象它通常与@ResponseBody合用,@ResponseBody与.@RequestBody刚好相反,他把指定的对象转换为合适的内容(请求头为Accept:application/json 则返回json数据)并返回。这里我们用一个ajax请求做演示:
由于Spring默认解析json用的是Jackson,所以我们这里要把jackson-core-asl-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.9.Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.jar和jackson-mapper-asl-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.9.Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.jar两个包添加到我们项目。
修改AccountModel让其继承Serializable接口,并添加一个空的构造函数(为了Jackson做转换)。
在DataBindController添加requestBodyBindaction,代码如下:
//@RequestBody Test@RequestMapping(value="/requestbodybind", method = {RequestMethod.GET})public String requestBodyBind(Model model){ model.addAttribute("accountmodel", new AccountModel()); return "requestbodybind"; } @RequestMapping(value="/requestbodybind", method = {RequestMethod.POST})public @ResponseBody AccountModel requestBodyBind(@RequestBody AccountModel accountModel){ return accountModel; }
在views文件夹中添加requestbodybind.jsp视图内容如下:
nbsp;html PUBLIC "-//WSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2C//DTD HTML Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.0Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2 Transitional//EN" "http://www.wSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.org/TR/htmlSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2/loose.dtd"><script dapprentissage springmvc liaison de donn></script><meta><title>Insert title here</title> <form> 用户名:<input><br> 密 码:<password></password><br> <input> </form> <script> $(function() { $("#submit").click(function() { var postdata = &#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;{"username":"&#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29; + $(&#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;#username&#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;).val() + &#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;","password":"&#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29; + $(&#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;#password&#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;).val() + &#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;"}&#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;; $.ajax({ type : &#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;POST&#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;, contentType : &#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;application/json&#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;, url : &#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;http://www.php.cn/:8080/SpringMVCLesson/databind/requestbodybind&#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;, processData : false, dataType : &#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;json&#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;, data : postdata, success : function(data) { alert(&#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;username : &#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;+data.username+&#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;\npassword : &#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;+data.password); }, error : function() { alert(&#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;error...&#Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-29;); } }); }); }); </script>
运行测试:
Le résultat est correct, prouvant que la conversion a réussi.
Série dapprentissage SpringMVC (5) Liaison de données-2.@RequestPart lie les données de type "multipart/form-data", prend en charge le téléchargement de fichiers javax.servlet.http.Part et peut effectuer une conversion de type. Pour plus de détails, consultez la documentation officielle :
<.>http://docs.spring.io/spring-framework/docs/Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.x/spring-framework-reference/htmlsingle/#new-in-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2.Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2-mvc-requestpart Ce qui précède est le Série d'apprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Le contenu de Data Binding-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (5) Liaison de données-2) Liaison de données-2 Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !