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

您的位置:首頁技術文章
文章詳情頁

Spring MVC數據綁定概述及原理詳解

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

數據綁定概述

在執行程序時,Spring MVC根據客戶端請求參數的不同,將請求消息中的信息以一定的方式轉換并綁定到控制器類的方法參數中。

這種將請求消息數據與后臺方法參數建立連接的過程就是 Spring MVC中的數據綁定。

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

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

(2)將處理方法的入參對象傳遞給 DataBinder。

(3) DataBinder調用ConversionService組件進行數據類型轉換、數據格式化等工作,并將 ServletRequest對象中的消息填充到參數對象中。

(4)調用Validator組件對已經綁定了請求消息數據的參數對象進行數據合法性校驗。

(5)校驗完成后會生成數據綁定結果 BindingResult對象,Spring MVC會將BindingResult對象中的內容賦給處理方法的相應參數。

根據客戶端請求參數類型和個數的不同,將 Spring Mvc中的數據綁定主要分為簡單數據綁定和復雜數據綁定

1.簡單數據綁定

綁定默認數據類型

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';}}

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

綁定簡單數據類型

簡單數據類型的綁定,就是指Java中幾種基本數據類型的綁定,如int、String、Double等類型。

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

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

@RequestParam注解主要用于對請求中的參數進行定義,在使用時可以指定它的4個屬性,具體如表12.1所示。

Spring MVC數據綁定概述及原理詳解

綁定POJO類型

在使用簡單數據類型綁定時,可以很容易地根據具體需求來定義方法中的形參類型和個數,然而在實際應用中,客戶端請求可能會傳遞多個不同類型的參數數據,如果還使用簡單數據類型進行綁定,那么就需要手動編寫多個不同類型的參數,這種操作顯然比較煩瑣。此時就可以使用POJO類型進行數據綁定。

POJO類型的數據綁定就是將所有關聯的請求參數封裝在一個POJO中,然后在方法中直接使用該POJO作為形參來完成數據綁定。

@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

使用簡單POJO類型已經可以完成多數的數據綁定,但有時客戶端請求中傳遞的參數會比較復雜。例如,在老師查詢學生時,頁面傳遞的參數可能包括班級名稱和學生號等信息,這就包含了班級和學生兩個對象的信息。如果將班級和學生的所有查詢條件都封裝在一個簡單POJO中,顯然會比較混亂,這時就可以考慮使用包裝POJO類型的數據綁定。

所謂的包裝POJO,就是在一個POJO中包含另一個簡單POJO。例如,在學生對象中包含班級對象。這樣在使用時,就可以通過學生查詢到班級信息。

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 {//向學生查詢頁面跳轉@RequestMapping('/tofindStudentWithBanji')public String tofindStudentWithBanji(){return 'student';}//查詢學生和班級信息@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';}}

復雜數據綁定

復雜的數據綁定問題,比如數組的綁定、集合的綁定

綁定數組

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){//使用輸出語句模擬已經刪除的課程for(Integer id:ids){System.out.println('刪除了id為'+id+'的課程');}}else{System.out.println('ids=null');}return 'success';}}

綁定集合

在項目中,前端請求傳遞過來的數據可能就會批量包含各種類型的數據,如 Integer、String等。這種情況使用數組綁定是無法實現的。針對這種情況,可以使用集合數據綁定,即在包裝類中定義一個包含對象類的集合,然后在接收方法中將參數類型定義為該包裝類的集合。

UserController.java:

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 国产精品成人aaaaa网站 | 国产成人一区二区三区 | 欧美高清强视频 | 成年视频在线 | 国产欧美亚洲精品 | 国产真实生活伦对白 | 国产孕妇孕交大片孕 | 美国毛片网站 | 亚洲视频日韩视频 | 欧美激情视频在线观看一区二区三区 | 精品99在线观看 | 男人天堂久久 | 思思91精品国产综合在线 | 亚洲国内精品 | 成人97 | 色站综合 | a级毛片免费全部播放 | 国产区一区| 亚洲三级毛片 | 日本三级香港三级三级人 | 国产日产欧美精品一区二区三区 | 女人张腿让男桶免费视频网站 | 日韩中文字幕精品久久 | 精品久久在线 | 曰本黄页 | 亚洲成人一级片 | 在线观看精品国产 | 亚洲精品专区一区二区欧美 | 国产区久久 | 看全色黄大色黄大片毛片 | 亚洲在成人网在线看 | re久久| 欧美国产日本精品一区二区三区 | 国产美女视频做爰 | 久久综合久久综合九色 | 国产成人亚洲精品2020 | 国产福利微拍精品一区二区 | 亚洲国产视频在线 | 国产伦精品一区二区三区无广告 | 国产色视频一区二区三区 | 日韩制服诱惑 |