springMVC數據封裝成POJO

springMVC把前臺的數據封裝為POJO與struts2的封裝形式不同。struts2需要在控制器聲明需封裝的POJO,而springMVC不需要任何準備工作,只需在相應的方法的參數中加上需封裝的POJO,當用戶提交表單時,springMVC會根據表單中dom元素的name屬性與請求的方法中的參數中的POJO的屬性名進行比對,如果相同,則將name屬性的值賦給這個屬性,進而完成封裝,下面舉例說明:

一、先看一下定義的POJO

Orders(訂單)

/*** 訂單* @author Administrator**/
public class Orders implements Serializable {private String oid;//訂單idprivate Opportunity  opportunity;//銷售機會 private Linkman linkman;//聯系人 private User user;//業務員 private Date bdate; //開單日期private Date fdate;//合同到期時間private Float ysprice;//應收金額private int statues;//審核狀態private Integer flag;//訂單狀態 private String remark;//備注private Integer uids;//訂單審核人
}

上面的Orders類中有一個Opportunity屬性(銷售機會),屬性名為opportunity,下面是定義的Opportunity類:

Opportunity(銷售機會)(注:Orders與Opportunity呈一對一關聯)

/*** 銷售機會* @author Administrator**/
public class Opportunity implements Serializable{private int opid;private Float allprice;//所有商品的購買總價private int allcount;//所有商品的購買數量private String odate;//下單時間private User user;//業務員private Linkman linkman;//聯系人
}

二、再看一下提交的jsp相關片段

三、上面的表單的請求地址是${pageContext.request.contextPath}/addOrder,我們來看一下這個方法的定義:

當用戶提交表單后,springMVC會找到這個方法,然后將表單中的name為opportunity對應的值賦給這個方法中Orders類中實例引用名orders的opportunity屬性,通過debug調試,可以印證這一點:

可以看出,對應表單中的name="opportunity.linkman.lname"對應的值,springMVC是先將此值賦給Opportunity類中的linkman屬性,再將opportunity的值賦給addOrder方法中參數Orders中的opportunity屬性,即完成了對其引用名orders的封裝。

四、如果將表單、請求方法修改成以下的情況,那又會如何呢?

還是bug調試,看一下執行addOrder方法時的情況:

以上的結果表明表單提交后,springMVC并沒有為addOrder方法參數中的Orders封裝opportunity這個屬性,這是因為表單中根本找不到這個屬性,何談封裝呢?但表單中有opid和linkman.lname這兩個屬性,且在addOrder方法中有Opportunity opp這個參數,在Opportunity 類中有opid、linkman這個兩個屬性,因此springMVC會將表單中的opid和linkman.lname這兩個屬性的值賦給參數中的Opportunity opp的opid、linkman這兩個屬性,從而進行封裝。

?

后記:springMVC相比于struts2,封裝機制更為智能,代碼會簡化很多。

?

轉載于:https://www.cnblogs.com/wql025/p/5006010.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458613.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458613.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458613.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QT輸入輸出(四)之 QProcess

QProcess Qt提供了一個QProcess類用于啟動外部程序并與之通信.這個類是異步工作的,而且在后臺執行,這樣用戶界面就可以始終保持響應。 啟動一個新的進程的操作非常簡單,只需要將待啟動的程序名稱和啟動參數傳遞給start()函數即可. 例如: QObj…

iOS 推送 邏輯

推送 階段一:Provider[服務端]把要發送的消息,目的IOS設備標識打包,發送給APNS; 階段二:APNS在自身的已注冊Push服務的IOS設備列表中,查找有相應標識的IOS設備,并將消息發送到IOS設備&#xff1…

正則提取的url中的域名以及替換域名的方法 preg_match()和preg_replace()

<?php //網站的url$url http://www.baidu.com/index.php;//正則表達式$reg /(http):\/\/([^\/])/i;preg_match($reg, $url,$res);/** $res的結果array (size3)0 > string http://www.baidu.com (length20)1 > string http (length4)2 > string www.baidu.com (…

音視頻開發

command s 截模擬器的屏幕 MP.4只是一個容器 H.264 H.263是真正的格式 H.265正在測試中 avi H.264 H.263 視頻解碼&#xff1a;將H.263 H.264轉換為視頻和音頻的格式 視頻編碼&#xff1a; 解碼&#xff1a;硬解碼&#xff1a;GPU做的解碼 CPU做除了圖片以外的&#…

10.11 安裝pod

原文地址&#xff1a;http://www.jianshu.com/p/5fc15906c53a 感謝。 更新升級10.11 cocoapods安裝出問題最簡單的解決方法 這是因為10.11把cocoapods直接干掉了 sudo gem install -n /usr/local/bin cocoapods 再加一句&#xff0c;完美解決 sudo xcode-select --switch /App…

windows任務管理器中的工作設置內存,內存專用工作集,提交大小詳解

通俗的講工作設置內存是程序占用的物理內存(包含與其他程序共享的一部分), 內存專用工作集是程序獨占的物理內存, 提交大小是程序獨占的內存(包含物理內存和在頁面文件中的內存). 注:頁面文件就是存放不在物理內存中的內存,文件路徑一般在C:\pagefile.sys,目的是為了能夠讓更…

coreData mapView #include

一、coreData 需要導入系統庫CoreData 新建文件的時候選core data 中的Data Model 然后加相應的表 加完表后 在Model.xcdatamodeld中新建文件 選coredata中的第三個 即可 如果兩個表有聯系 就將附表放到主表中 在build Setting中&#xff0c;輸入search 在Framework Searc…

淺談 C++ 中的 new/delete 和 new[]/delete[]

來自&#xff1a;http://www.cnblogs.com/hazir/p/new_and_delete.html 在 C 中&#xff0c;你也許經常使用 new 和 delete 來動態申請和釋放內存&#xff0c;但你可曾想過以下問題呢&#xff1f; new 和 delete 是函數嗎&#xff1f;new [] 和 delete [] 又是什么&#xff1f…

JavaScript中的原型繼承原理

在JavaScript當中&#xff0c;對象A如果要繼承對象B的屬性和方法&#xff0c;那么只要將對象B放到對象A的原型鏈上即可。而某個對象的原型鏈&#xff0c;就是由該對象開始&#xff0c;通過__proto__屬性連接起來的一串對象。__proto__屬性是JavaScript對象中的內部屬性&#xf…

XMPP

XMPP不支持視頻聊天 支持文字聊天 但對于圖片和語音聊天支持的不好 那么就將他們轉成NSData的形式 IM Instance Message 即時聊天 聊天系統中 XMPP主要做兩個人的聊天和群聊&#xff0c;只用了這兩個功能 還有一個HTTP的服務器 &#xff0c;他是一個旁路服務器 XMPP底層…

QT 調試

QT調試&#xff08;參考下面的說明就可以正常調試&#xff09;&#xff1a;http://blog.csdn.net/wchengshen/article/details/50254731http://blog.csdn.net/sx341125/article/details/53606534 QT調用DLL&#xff1a; Qt中調用VS編譯dll的方法(一)----顯式調用 qt使用動態庫(…

建模元件有哪些在MapleSim中

信號庫&#xff1a;包含通用信號模塊、布爾、控制器、離散信號模塊、信號源、線性信號模塊、非線性信號模塊、時間離散信號模塊、查詢表、信號轉換器、數學運算、關系元件、特殊信號模塊&#xff0c;應用案例。 電子庫&#xff1a;包含電阻、運算放大器、二極管、步進電機、模擬…

iOS小筆記

controller&#xff1a;連接二者的橋梁&#xff1b;cocoa frameworks 有兩個框架&#xff1a;foundationfoundation 是cocoa中最基本的一些類&#xff1b;再mac應用程序中負責對象管理&#xff0c;內存管理&#xff0c;容器等相關數據&#xff1b;uikit&#xff1a;uikit&…

【C++】VS2010將寫好的程序打包成安裝文件發布

參考鏈接&#xff1a;http://blog.csdn.net/yongh701/article/details/51326142 我們可以將自己寫好的VS2010程序打包成安裝文件&#xff0c;給用戶安裝&#xff0c;具體步驟如下&#xff1a; 1、如下圖&#xff0c;同樣是新建一個項目&#xff0c;但是這次是新建一個其它項目…

01_jeecms建站

一、環境安裝 JDK5TOMCAT5.5MYSQL5及以上http://www.jeecms.com/tutorial/index.jhtml參考環境安裝篇二、解壓文件安裝包jeecms-v5zip,如圖圖1ROOT文件夾復制放到tomcat下的webapps文件夾&#xff08;注&#xff1a;請先刪除webapps下原有的默認ROOT文件夾&#xff09;如不想部…

WiFi基本知識

轉自&#xff1a;http://blog.csdn.net/myarrow/article/details/7930131 1. IE802.11簡介 標準號IEEE 802.11bIEEE 802.11aIEEE 802.11gIEEE 802.11n標準發布時間1999年9月1999年9月2003年6月2009年9月工作頻率范圍2.4&#xff0d;2.4835GHz 5.150&#xff0d;5.350GHz5.475&a…

iOS各種小理論知識

Objective-C 部分 1. 你如何理解 OC 的內存管理 OC 內存管理是基于引用計數。誰想使用某個對象 B,就要把對象 B 的計數器1,如果不 使用這個對象了,那么就把對象 B 計數器-1,如果 B 對象計數器減到 0,那么 B 對象自動會調用自己的 dealloc 函數,也就是這個對象被銷毀。 一…

libev 宏展開

想看源碼&#xff0c;宏太多&#xff0c;看著累&#xff0c;宏展開&#xff0c;再看&#xff0c;功力時間不夠&#xff0c;先放下 放上宏展開后的代碼。 libev4.20 展開方示為 ./configure 修改makefile文件&#xff0c;字符串 替換CC為 CPP 注意要把基礎的CC定義保留 make mv …

FreeRTOS高級篇7---FreeRTOS內存管理分析

原文&#xff1a;http://blog.csdn.net/zhzht19861011/article/details/51606068 內存管理對應用程序和操作系統來說都非常重要。現在很多的程序漏洞和運行崩潰都和內存分配使用錯誤有關。 FreeRTOS操作系統將內核與內存管理分開實現&#xff0c;操作系統內核僅規定了必要的內…

筆試題

1.是不是一個父類寫了一個virtual 函數&#xff0c;如果子類覆蓋它的函數不加virtual ,也能實現多態? virtual修飾符會被隱形繼承的。private 也被集成&#xff0c;只事派生類沒有訪問權限而已。virtual可加可不加。子類的空間里有父類的所有變量(static除外)。同一個函數只存…