国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Spring MVC數(shù)據(jù)綁定概述及原理詳解

瀏覽:2日期:2023-08-30 18:07:11

數(shù)據(jù)綁定概述

在執(zhí)行程序時(shí),Spring MVC根據(jù)客戶端請(qǐng)求參數(shù)的不同,將請(qǐng)求消息中的信息以一定的方式轉(zhuǎn)換并綁定到控制器類的方法參數(shù)中。

這種將請(qǐng)求消息數(shù)據(jù)與后臺(tái)方法參數(shù)建立連接的過程就是 Spring MVC中的數(shù)據(jù)綁定。

在數(shù)據(jù)綁定過程中,Spring MVC框架會(huì)通過數(shù)據(jù)綁定組件(DataBinder)將請(qǐng)求參數(shù)串的內(nèi)容進(jìn)行類型轉(zhuǎn)換,然后將轉(zhuǎn)換后的值賦給控制器類中方法的形參,這樣后臺(tái)方法就可以正確綁定并獲取客戶端請(qǐng)求攜帶的參數(shù)。具體的信息處理過程的步驟如下。

(1)Spring MVC將ServletRequest對(duì)象傳遞給 DataBinder。

(2)將處理方法的入?yún)?duì)象傳遞給 DataBinder。

(3) DataBinder調(diào)用ConversionService組件進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換、數(shù)據(jù)格式化等工作,并將 ServletRequest對(duì)象中的消息填充到參數(shù)對(duì)象中。

(4)調(diào)用Validator組件對(duì)已經(jīng)綁定了請(qǐng)求消息數(shù)據(jù)的參數(shù)對(duì)象進(jìn)行數(shù)據(jù)合法性校驗(yàn)。

(5)校驗(yàn)完成后會(huì)生成數(shù)據(jù)綁定結(jié)果 BindingResult對(duì)象,Spring MVC會(huì)將BindingResult對(duì)象中的內(nèi)容賦給處理方法的相應(yīng)參數(shù)。

根據(jù)客戶端請(qǐng)求參數(shù)類型和個(gè)數(shù)的不同,將 Spring Mvc中的數(shù)據(jù)綁定主要分為簡(jiǎn)單數(shù)據(jù)綁定和復(fù)雜數(shù)據(jù)綁定

1.簡(jiǎn)單數(shù)據(jù)綁定

綁定默認(rèn)數(shù)據(jù)類型

UserController.java:

package com.ssm.controller;import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class UserController {@RequestMapping(value='/selectUser')public String selectUser(HttpServletRequest request) {String id=request.getParameter('id');System.out.println('id='+id);return 'success';}}

使用注解方式定義了一個(gè)控制器類,同時(shí)定義了方法的訪問路徑。在方法參數(shù)中使用了HttpServletRequest類型,并通過該對(duì)象的 getParameter()方法獲取了指定的參數(shù)。為了方便查看結(jié)果,將獲取的參數(shù)進(jìn)行輸出打印,最后返回一個(gè)名為“success”的視圖,Spring MVC會(huì)通過視圖解析器在“WEB-INF/jsp”路徑下尋找“success.jsp”文件。

綁定簡(jiǎn)單數(shù)據(jù)類型

簡(jiǎn)單數(shù)據(jù)類型的綁定,就是指Java中幾種基本數(shù)據(jù)類型的綁定,如int、String、Double等類型。

@RequestMapping(value='/selectUser')public String selectUser(Integer id) {System.out.println('id='+id);return 'success';}

與默認(rèn)數(shù)據(jù)類型案例中的 selectUser()方法相比,此方法中只是將 HttpServletrEquest參數(shù)類型替換為了 Integer類型。

@RequestParam注解主要用于對(duì)請(qǐng)求中的參數(shù)進(jìn)行定義,在使用時(shí)可以指定它的4個(gè)屬性,具體如表12.1所示。

Spring MVC數(shù)據(jù)綁定概述及原理詳解

綁定POJO類型

在使用簡(jiǎn)單數(shù)據(jù)類型綁定時(shí),可以很容易地根據(jù)具體需求來定義方法中的形參類型和個(gè)數(shù),然而在實(shí)際應(yīng)用中,客戶端請(qǐng)求可能會(huì)傳遞多個(gè)不同類型的參數(shù)數(shù)據(jù),如果還使用簡(jiǎn)單數(shù)據(jù)類型進(jìn)行綁定,那么就需要手動(dòng)編寫多個(gè)不同類型的參數(shù),這種操作顯然比較煩瑣。此時(shí)就可以使用POJO類型進(jìn)行數(shù)據(jù)綁定。

POJO類型的數(shù)據(jù)綁定就是將所有關(guān)聯(lián)的請(qǐng)求參數(shù)封裝在一個(gè)POJO中,然后在方法中直接使用該P(yáng)OJO作為形參來完成數(shù)據(jù)綁定。

@RequestMapping('/toRegister')public String toRegister() {return 'register';}@RequestMapping('/registerUser')public String registerUser(User user) {String username=user.getUserName();String password=user.getPassword();System.out.println('username='+username);System.out.println('password='+password);return 'success';}

綁定包裝POJO

使用簡(jiǎn)單POJO類型已經(jīng)可以完成多數(shù)的數(shù)據(jù)綁定,但有時(shí)客戶端請(qǐng)求中傳遞的參數(shù)會(huì)比較復(fù)雜。例如,在老師查詢學(xué)生時(shí),頁面?zhèn)鬟f的參數(shù)可能包括班級(jí)名稱和學(xué)生號(hào)等信息,這就包含了班級(jí)和學(xué)生兩個(gè)對(duì)象的信息。如果將班級(jí)和學(xué)生的所有查詢條件都封裝在一個(gè)簡(jiǎn)單POJO中,顯然會(huì)比較混亂,這時(shí)就可以考慮使用包裝POJO類型的數(shù)據(jù)綁定。

所謂的包裝POJO,就是在一個(gè)POJO中包含另一個(gè)簡(jiǎn)單POJO。例如,在學(xué)生對(duì)象中包含班級(jí)對(duì)象。這樣在使用時(shí),就可以通過學(xué)生查詢到班級(jí)信息。

StudentController. java:

package com.ssm.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import com.ssm.po.Banji;import com.ssm.po.Student;@Controllerpublic class StudentController {//向?qū)W生查詢頁面跳轉(zhuǎn)@RequestMapping('/tofindStudentWithBanji')public String tofindStudentWithBanji(){return 'student';}//查詢學(xué)生和班級(jí)信息@RequestMapping('/findStudentWithBanji')public String findStudentWithBanji(Student student){Integer stu_id=student.getStu_id();Banji banji=student.getBanji();String banji_name=banji.getBanji_name();System.out.println('stu_id='+stu_id);System.out.println('banji_name='+banji_name);return 'success';}}

復(fù)雜數(shù)據(jù)綁定

復(fù)雜的數(shù)據(jù)綁定問題,比如數(shù)組的綁定、集合的綁定

綁定數(shù)組

CourseController.java:

package com.ssm.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class CourseController {@RequestMapping('/toCourse')public String toCourse(){return 'course';}@RequestMapping('/deleteCourse')public String deleteCourse(Integer[] ids){if(ids!=null){//使用輸出語句模擬已經(jīng)刪除的課程for(Integer id:ids){System.out.println('刪除了id為'+id+'的課程');}}else{System.out.println('ids=null');}return 'success';}}

綁定集合

在項(xiàng)目中,前端請(qǐng)求傳遞過來的數(shù)據(jù)可能就會(huì)批量包含各種類型的數(shù)據(jù),如 Integer、String等。這種情況使用數(shù)組綁定是無法實(shí)現(xiàn)的。針對(duì)這種情況,可以使用集合數(shù)據(jù)綁定,即在包裝類中定義一個(gè)包含對(duì)象類的集合,然后在接收方法中將參數(shù)類型定義為該包裝類的集合。

UserController.java:

//向用戶批量修改頁面跳轉(zhuǎn)@RequestMapping('/toUserEdit')public String toUserEdit() {return 'user_edit';}//接收批量修改用戶的方法@RequestMapping('/editUsers')public String editUsers(UserVo userList){//將所有用戶數(shù)據(jù)封裝到集合中List<User> users=userList.getUsers();for(User user:users){if(user.getId()!=null){System.out.println('刪除了id為'+user.getId()+'的用戶名為'+user.getUsername());}}return 'success';}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 中文字幕乱码中文乱码51精品 | 亚洲视频在线免费播放 | 国产丶欧美丶日韩丶不卡影视 | 欧美特黄aaaaaa | 18视频免费网址在线观看 | 久久视屏这里只有精品6国产 | 波多野结衣手机视频一区 | 色吊丝在线观看国产 | 国产一区二区亚洲精品天堂 | 九九免费精品视频 | 国产成人 免费观看 | 三级黄色片在线免费观看 | 97香蕉久久夜色精品国产 | 乱人伦中文视频在线 | 欧美午夜毛片a级在线 | 欧美一级www片免费观看 | 色悠久久久久综合网伊人男男 | 色片在线播放 | 男人把女人桶到喷白浆的视频 | 高清视频一区 | 成人午夜影视 | 最新欧美精品一区二区三区不卡 | 99久久精品免费观看国产 | 欧美手机手机在线视频一区 | 伊人www| 久久大陆| 中国一级特黄视频 | 在线日韩三级 | 99久热在线精品视频播 | 欧美在线黄色 | 精品亚洲欧美高清不卡高清 | 老司机亚洲精品 | 中文字幕精品一区二区绿巨人 | 国产三级小视频 | 欧美特黄aaaaaaaa大片 | 成人精品视频一区二区在线 | 久久国产成人精品国产成人亚洲 | 在线视频中文 | 中文字幕一区二区在线视频 | 日韩欧美二区 | 一级做性色a爰片久久毛片免费 |