springMVC数据封装成POJO
springMVC把前臺(tái)的數(shù)據(jù)封裝為POJO與struts2的封裝形式不同。struts2需要在控制器聲明需封裝的POJO,而springMVC不需要任何準(zhǔn)備工作,只需在相應(yīng)的方法的參數(shù)中加上需封裝的POJO,當(dāng)用戶提交表單時(shí),springMVC會(huì)根據(jù)表單中dom元素的name屬性與請(qǐng)求的方法中的參數(shù)中的POJO的屬性名進(jìn)行比對(duì),如果相同,則將name屬性的值賦給這個(gè)屬性,進(jìn)而完成封裝,下面舉例說明:
一、先看一下定義的POJO
Orders(訂單)
/*** 訂單* @author Administrator**/ public class Orders implements Serializable {private String oid;//訂單idprivate Opportunity opportunity;//銷售機(jī)會(huì) private Linkman linkman;//聯(lián)系人 private User user;//業(yè)務(wù)員 private Date bdate; //開單日期private Date fdate;//合同到期時(shí)間private Float ysprice;//應(yīng)收金額private int statues;//審核狀態(tài)private Integer flag;//訂單狀態(tài) private String remark;//備注private Integer uids;//訂單審核人 }上面的Orders類中有一個(gè)Opportunity屬性(銷售機(jī)會(huì)),屬性名為opportunity,下面是定義的Opportunity類:
Opportunity(銷售機(jī)會(huì))(注:Orders與Opportunity呈一對(duì)一關(guān)聯(lián))
/*** 銷售機(jī)會(huì)* @author Administrator**/ public class Opportunity implements Serializable{private int opid;private Float allprice;//所有商品的購(gòu)買總價(jià)private int allcount;//所有商品的購(gòu)買數(shù)量private String odate;//下單時(shí)間private User user;//業(yè)務(wù)員private Linkman linkman;//聯(lián)系人 }二、再看一下提交的jsp相關(guān)片段
三、上面的表單的請(qǐng)求地址是${pageContext.request.contextPath}/addOrder,我們來看一下這個(gè)方法的定義:
當(dāng)用戶提交表單后,springMVC會(huì)找到這個(gè)方法,然后將表單中的name為opportunity對(duì)應(yīng)的值賦給這個(gè)方法中Orders類中實(shí)例引用名orders的opportunity屬性,通過debug調(diào)試,可以印證這一點(diǎn):
可以看出,對(duì)應(yīng)表單中的name="opportunity.linkman.lname"對(duì)應(yīng)的值,springMVC是先將此值賦給Opportunity類中的linkman屬性,再將opportunity的值賦給addOrder方法中參數(shù)Orders中的opportunity屬性,即完成了對(duì)其引用名orders的封裝。
四、如果將表單、請(qǐng)求方法修改成以下的情況,那又會(huì)如何呢?
還是bug調(diào)試,看一下執(zhí)行addOrder方法時(shí)的情況:
以上的結(jié)果表明表單提交后,springMVC并沒有為addOrder方法參數(shù)中的Orders封裝opportunity這個(gè)屬性,這是因?yàn)楸韱沃懈菊也坏竭@個(gè)屬性,何談封裝呢?但表單中有opid和linkman.lname這兩個(gè)屬性,且在addOrder方法中有Opportunity opp這個(gè)參數(shù),在Opportunity 類中有opid、linkman這個(gè)兩個(gè)屬性,因此springMVC會(huì)將表單中的opid和linkman.lname這兩個(gè)屬性的值賦給參數(shù)中的Opportunity opp的opid、linkman這兩個(gè)屬性,從而進(jìn)行封裝。
?
后記:springMVC相比于struts2,封裝機(jī)制更為智能,代碼會(huì)簡(jiǎn)化很多。
?
轉(zhuǎn)載于:https://www.cnblogs.com/wql025/p/5006010.html
總結(jié)
以上是生活随笔為你收集整理的springMVC数据封装成POJO的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java-接口与多态-
- 下一篇: 委托内部