搜尋
首頁Javajava教程SpringMVC學習系列(5) 之 資料綁定-2

在系列(SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2)中我們介紹瞭如何用@RequestParam來綁定數據,下面我們來看一下其它幾個數據綁定註解的使用方法。

SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.@PathVariable 用來綁定URL模板變數值,這個我們已經在系列(SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2)中介紹了使用方法,這裡不在贅述。

SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.@CookieValue 用來綁定Cookie中的資料。下面我們用取得Cookie中的sessionId做測試:

在DataBindController加入cookiebind action,程式碼如下:

//@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";
}


在views資料夾中加入一個cookiebindresult .jsp視圖,程式碼如下:

nbsp;html PUBLIC "-//WSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2C//DTD HTML SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.0SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2 Transitional//EN" "http://www.wSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.org/TR/htmlSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2/loose.dtd"><meta><title>Insert title here</title>
    ${jsessionId}


執行測試:

SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2

##可以看到已經取得到了sessionId。

註:@CookieValue 與@RequestParam 一樣也有SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2個參數,其意義與的@RequestParam 參數意義相同。

SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.@RequestHeader 用來綁定請求頭中的數據,我們用@RequestHeader取得User-Agent 來做示範:

在DataBindController新增requestheaderbind action,程式碼如下:

//@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";
}


在views資料夾中新增一個requestheaderbindresult.jsp視圖,程式碼如下:

nbsp;html PUBLIC "-//WSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2C//DTD HTML SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.0SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2 Transitional//EN" "http://www.wSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.org/TR/htmlSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2/loose.dtd"><meta><title>Insert title here</title>
    ${userAgent}


執行測試:

SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2

可以看到已經取得到了User-Agent 。

註:@RequestHeader 與@RequestParam 一樣也有SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2個參數,其意義與的@RequestParam 參數意義相同。

SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.@ModelAttribute 綁定資料到模型中。在系列(SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2)的modelAutoBind action中我們將表單提交的資料加入Model中的程式碼如下:

@RequestMapping(value="/modelautobind", method = {RequestMethod.POST})public String modelAutoBind(HttpServletRequest request, Model model, AccountModel accountModel){
    
    model.addAttribute("accountmodel", accountModel);    return "modelautobindresult";
}

而藉助@ModelAttribute 我們可以更簡單的講資料新增到Model中,把上面的程式碼修改為:

@RequestMapping(value="/modelautobind", method = {RequestMethod.POST})public String modelAutoBind(HttpServletRequest request, @ModelAttribute("accountmodel") AccountModel accountModel){    
    return "modelautobindresult";
}

#運行測試:

SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2

可以看到依然成功的綁定了提交的數據。

SpringMVC學習系列(5) 之 資料綁定-2.Model中的資料作用域是Request等級的,也就是說在一個Request請求中是取得不到其它Request請求的Model的資料的。但我們可以用@SessionAttributes 把數據儲存到session中,來保持多次請求間數據,這樣就可以來實現例如分步驟提交表單等需求。下面我們來看如何分SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2步驟把資料綁定到AccountModel中:

在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 "-//WSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2C//DTD HTML SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.0SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2 Transitional//EN" "http://www.wSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.org/TR/htmlSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2/loose.dtd"><meta><title>Insert title here</title>
    <form>     
        用户名:<input><br>
        <input>
    </form>  


nbsp;html PUBLIC "-//WSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2C//DTD HTML SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.0SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2 Transitional//EN" "http://www.wSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.org/TR/htmlSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2/loose.dtd"><meta><title>Insert title here</title>
    <form>     
        密 码:<password></password><br>
        <input>
    </form>  


nbsp;html PUBLIC "-//WSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2C//DTD HTML SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.0SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2 Transitional//EN" "http://www.wSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.org/TR/htmlSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2/loose.dtd"><meta><title>Insert title here</title>
    用户名:${sessionaccountmodel.username}<br>
    密 码:${sessionaccountmodel.password}


运行测试:

SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2

SpringMVC學習系列(5) 之 資料綁定-2

SpringMVC學習系列(5) 之 資料綁定-2

可以看到我们已经成功的分SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-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}) 。

SpringMVC學習系列(5) 之 資料綁定-2.@RequestBody 调用合适的MessageConvert来把非application/x-www-form-urlencoded请求中的内容转换为指定的对象它通常与@ResponseBody合用,@ResponseBody与.@RequestBody刚好相反,他把指定的对象转换为合适的内容(请求头为Accept:application/json 则返回json数据)并返回。这里我们用一个ajax请求做演示:

由于Spring默认解析json用的是Jackson,所以我们这里要把jackson-core-asl-SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.9.SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.jar和jackson-mapper-asl-SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.9.SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-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 "-//WSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2C//DTD HTML SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.0SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2 Transitional//EN" "http://www.wSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.org/TR/htmlSpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2/loose.dtd"><script></script><meta><title>Insert title here</title>
    <form>     
        用户名:<input><br>
        密 码:<password></password><br>
        <input>
    </form> 
    
    <script>
        $(function() { 
            $("#submit").click(function() {   
                var postdata = &#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;{"username":"&#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29; + $(&#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;#username&#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;).val() + &#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;","password":"&#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29; + $(&#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;#password&#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;).val() + &#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;"}&#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;;   
                $.ajax({  
                    type : &#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;POST&#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;,  
                    contentType : &#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;application/json&#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;,  
                    url : &#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;http://www.php.cn/:8080/SpringMVCLesson/databind/requestbodybind&#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;,  
                    processData : false,  
                    dataType : &#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;json&#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;,  
                    data : postdata,  
                    success : function(data) {  
                        alert(&#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;username : &#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;+data.username+&#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;\npassword : &#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;+data.password);  
                    },  
                    error : function() {  
                        alert(&#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;error...&#SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-29;);  
                    }  
                }); 
            });
        });    </script> 


运行测试:

SpringMVC學習系列(5) 之 資料綁定-2

結果正確,證明轉換成功。

SpringMVC學習系列(5) 之 資料綁定-2.@RequestPart 綁定「multipart/form-data「類型數據,支援javax.servlet.http.Part文件上傳,並可進行類型轉換,詳見官方文件:

http://docs.spring.io/spring-framework/docs/SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.x/spring-framework-reference/htmlsingle/#new-in-SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2.SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2-mvc-requestpart

 以上就是SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之資料綁定-SpringMVC學習系列(SpringMVC學習系列(5) 之 資料綁定-2) 之 資料綁定-2的內容,更多相關內容請關注PHP中文網(www.php.cn)!


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器