專利名稱::基于json進(jìn)行對(duì)象化參數(shù)傳遞的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種參數(shù)傳遞的方法及系統(tǒng),尤其涉及一種基于JSON進(jìn)行對(duì)象化參數(shù)傳遞的方法及系統(tǒng)。
背景技術(shù):
:現(xiàn)有技術(shù)中,傳參的各種具體方法如下頁(yè)面向action傳參(l)http協(xié)議里,提供的標(biāo)準(zhǔn)url傳參方式是在“問(wèn)號(hào)”后面跟上參數(shù)的key和Value0(2)jsp/servlet中,利用HttpServletRequest對(duì)象,封裝了參數(shù)Js只能獲取問(wèn)號(hào)后面的整體,無(wú)法單獨(dú)獲取某個(gè)參數(shù)的值,例如頁(yè)面url請(qǐng)求為useinfo?username=tom&age=22,在servlet里面,獲取這2個(gè)參數(shù)的方法為Stringusername=request.getParameter(/rusername“),Stringage=request.getParameter(/rage“);jsMvarsearch=window,location,search,所述search獲取的結(jié)果為username=tom&age=22,要想獲得具體的參數(shù),還需自己截??;當(dāng)然js里也可以通過(guò)一些正則表達(dá)式的代碼來(lái)完成單個(gè)參數(shù)值的獲取。action向頁(yè)面?zhèn)鲄⒁话阏Z(yǔ)言沒(méi)有專門的方法,大多是要通過(guò)用戶自己輸出字符串的方式,或是在前臺(tái)里面標(biāo)簽對(duì)給js賦值。web系統(tǒng)頁(yè)面與頁(yè)面之前,頁(yè)面與action之間會(huì)有很多參數(shù)的傳遞與交互,傳統(tǒng)的傳參方式是扁平化的,不夠靈活,特別是在面對(duì)大量結(jié)構(gòu)化參數(shù)的時(shí)候,如需要傳遞一個(gè)簡(jiǎn)單的對(duì)象信息,一個(gè)數(shù)組信息,例如需要從url傳遞5個(gè)用戶名和年齡到另一個(gè)頁(yè)面,原有的方式可能是“userinfo.jsp?username=1,2,3,4,5&age=20,21,22,23,25”。上述方式無(wú)論是原頁(yè)面拼接參數(shù)還是action的接收參數(shù)都會(huì)很麻煩,需要接到參數(shù)后再利用split之類的函數(shù)進(jìn)行分割再組裝。如果是js里面需要從url獲取參數(shù)就更麻煩,因?yàn)閖s沒(méi)有原生的獲取url指定參數(shù)的方法?,F(xiàn)有的扁平化的傳參在簡(jiǎn)單參數(shù)傳遞的時(shí)候很方便,但是在復(fù)雜參數(shù)傳遞的時(shí)候不論是原頁(yè)面參數(shù)的拼接、還是接受頁(yè)面參數(shù)的接受,都會(huì)很不方便,會(huì)要寫多余的一些代碼,并且會(huì)需要程序員進(jìn)一步理解上格式轉(zhuǎn)換的過(guò)程,如果只需一次傳參還好,涉及到頁(yè)面前action多次傳參的時(shí)候,原來(lái)的方式就顯得更力不從心了。本發(fā)明因此而來(lái)。
發(fā)明內(nèi)容本發(fā)明的主要目的是提供一種基于JSON進(jìn)行對(duì)象化參數(shù)傳遞的方法及系統(tǒng),用以解決現(xiàn)有技術(shù)中復(fù)雜參數(shù)傳參及多次傳參中操作復(fù)雜的技術(shù)問(wèn)題。為解決上述問(wèn)題,根據(jù)本發(fā)明的一個(gè)方面,提供了一種基于JSON進(jìn)行對(duì)象化參數(shù)傳遞的方法。本發(fā)明的對(duì)象化傳參的方法,包括通過(guò)頁(yè)面js將json對(duì)象轉(zhuǎn)化為字符串、并將所述字符串作為url參數(shù)的值,以系統(tǒng)實(shí)現(xiàn)約定的key進(jìn)行url參數(shù)的傳遞;通過(guò)filter攔截特定參數(shù),并將其轉(zhuǎn)化為對(duì)象;利用action的公共父類來(lái)存儲(chǔ)所述對(duì)象化后的參數(shù);向所述參數(shù)結(jié)構(gòu)中增加或減少內(nèi)容,利用ViewState將轉(zhuǎn)化成json對(duì)象的字符串輸出到頁(yè)面的〈script〉塊中,形成js的json對(duì)象;action從所述父類中獲取對(duì)象化的參數(shù)、并完成邏輯的處理;回到頁(yè)面后,新頁(yè)面從js中獲取全局對(duì)象化參數(shù)、并進(jìn)行處理。進(jìn)一步地,將json對(duì)象轉(zhuǎn)化為字符串之前還包括如下步驟通過(guò)頁(yè)面js將需要傳遞的參數(shù)構(gòu)造成json對(duì)象。進(jìn)一步地,通過(guò)filter攔截特定參數(shù),并將其轉(zhuǎn)化為對(duì)象包括如下步驟通過(guò)filter攔截request請(qǐng)求、并獲取特定key的value,將所述value轉(zhuǎn)化成對(duì)象。更進(jìn)一步地,利用action的公共父類來(lái)存儲(chǔ)所述對(duì)象化后的參數(shù)包括如下步驟將所述value轉(zhuǎn)化成的對(duì)象賦值給action的公共父類的屬性。為解決上述問(wèn)題,根據(jù)本發(fā)明的另一方面,提供了一種基于JSON進(jìn)行對(duì)象化參數(shù)傳遞的系統(tǒng)。本發(fā)明的對(duì)象化傳參的系統(tǒng),包括轉(zhuǎn)化模塊通過(guò)頁(yè)面js用于將json對(duì)象轉(zhuǎn)化為字符串、并將所述字符串作為url參數(shù)的值,以系統(tǒng)實(shí)現(xiàn)約定的key進(jìn)行url參數(shù)的傳遞;攔截模塊用于通過(guò)filter攔截特定參數(shù),并將其轉(zhuǎn)化為對(duì)象;存儲(chǔ)模塊用于利用action的公共父類來(lái)存儲(chǔ)所述對(duì)象化后的參數(shù);形成模塊用于向所述參數(shù)結(jié)構(gòu)中增加或減少內(nèi)容,利用ViewState將轉(zhuǎn)化成json對(duì)象的字符串輸出到頁(yè)面的〈script〉塊中,形成js的json對(duì)象;第一獲取模塊用于使得action從所述父類中獲取對(duì)象化的參數(shù)、并完成邏輯的處理;第二獲取模塊用于使得新頁(yè)面從js中獲取全局對(duì)象化參數(shù)、并進(jìn)行處理。進(jìn)一步地,所述轉(zhuǎn)化模塊還用于將json對(duì)象轉(zhuǎn)化為字符串之前,通過(guò)頁(yè)面js將需要傳遞的參數(shù)構(gòu)造成json對(duì)象。進(jìn)一步地,所述攔截模塊還用于通過(guò)filter攔截request請(qǐng)求、并獲取特定key的value,將所述value轉(zhuǎn)化成對(duì)象。進(jìn)一步地,所述存儲(chǔ)模塊還用于將所述value轉(zhuǎn)化成的對(duì)象賦值給action的公共父類的屬性。與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果為(1)在傳遞關(guān)聯(lián)性很強(qiáng)的很多參數(shù)及數(shù)組類型的參數(shù)時(shí),程序員在action層可以直接獲取封裝成Map或是List的對(duì)象,結(jié)構(gòu)更加清晰,無(wú)需類似于split的操作;(2)頁(yè)面js可以獲取action傳遞的已經(jīng)被轉(zhuǎn)換成json對(duì)象的參數(shù),直接用object,key的方式訪問(wèn)參數(shù)值,操作方便,便于理解。下面結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步描述圖1是根據(jù)本發(fā)明實(shí)施例的對(duì)象化傳參的方法的主要步驟的示意圖;圖2是根據(jù)本發(fā)明實(shí)施例的對(duì)象化傳參的系統(tǒng)的主要模塊的示意圖。圖3是根據(jù)本發(fā)明實(shí)施例的對(duì)象化傳參的具體流程圖。具體實(shí)施例方式以下結(jié)合具體實(shí)施例對(duì)上述方案做進(jìn)一步說(shuō)明。應(yīng)理解,這些實(shí)施例是用于說(shuō)明本發(fā)明而不限于限制本發(fā)明的范圍。實(shí)施例中采用的實(shí)施條件可以根據(jù)具體廠家的條件做進(jìn)一步調(diào)整,未注明的實(shí)施條件通常為常規(guī)使用的條件。實(shí)施例如圖1所示,本發(fā)明中的技術(shù)方案主要依賴與json格式。JSON(JavaScriptObjectNotation)是一種輕量級(jí)的數(shù)據(jù)交換格式,易于人們閱讀和編寫,同時(shí)也易于機(jī)器解析和生成。JSON建構(gòu)于兩種結(jié)構(gòu)(1)“名稱/值”對(duì)的集合(Acollectionofname/valuepairs),不同的語(yǔ)言中,它被理解為對(duì)象(object),紀(jì)錄(record),結(jié)構(gòu)(struct),字典(dictionary),哈希表(hashtable),有鍵列表(keyedlist),或者關(guān)聯(lián)數(shù)組(associativearray)。(2)值的有序列表(Anorderedlistofvalues)0在大部分語(yǔ)言中,它被理解為數(shù)組(array)。一個(gè)簡(jiǎn)單的json格式描述如下User={name=“tom”,age=23},地址欄傳遞的是字符串,action也有自己的數(shù)據(jù)機(jī)構(gòu)(Map,List),在不同的格式,不同的語(yǔ)言之間傳遞,自然需要解決格式之間轉(zhuǎn)換的問(wèn)題,js中Jsontostring可以有很多框架提供方法,如Extjs,jquery等Java中Map,listtojson也有第三方類庫(kù),如json.jar;經(jīng)過(guò)轉(zhuǎn)換后,地址欄傳遞的將是這樣一種格式userinfo.jsp?json={‘user’{‘username,,torn,,,age,=23}}。下面將參考附圖并結(jié)合實(shí)施例,來(lái)詳細(xì)說(shuō)明本發(fā)明。圖1是根據(jù)本發(fā)明實(shí)施例的對(duì)象化傳參的方法的主要步驟的示意圖。如圖1所示,該方法包括如下的步驟步驟Sl通過(guò)頁(yè)面js將需要傳遞的參數(shù)構(gòu)造成json對(duì)象,然后再通過(guò)頁(yè)面js將所述json對(duì)象轉(zhuǎn)化為字符串、并將所述字符串作為url參數(shù)的值,以系統(tǒng)實(shí)現(xiàn)約定的key進(jìn)行url參數(shù)的傳遞。步驟S2通過(guò)filter攔截特定參數(shù),并將其轉(zhuǎn)化為對(duì)象,具體過(guò)程包括通過(guò)filter攔截request請(qǐng)求、并獲取特定key的value,將所述value轉(zhuǎn)化成對(duì)象?,F(xiàn)有技術(shù)中,參數(shù)action是從http請(qǐng)求的request里面獲取的,request為所有action提供了參數(shù)載體;本發(fā)明中,對(duì)象化的參數(shù)為了不和原來(lái)的request內(nèi)參數(shù)混淆,需要有自己的載體。步驟S3利用action的公共父類來(lái)存儲(chǔ)所述對(duì)象化后的參數(shù),具體過(guò)程包括將所述value轉(zhuǎn)化成的對(duì)象賦值給action的公共父類的屬性。步驟S4:action從所述父類中獲取對(duì)象化的參數(shù)、并完成邏輯的處理。步驟S5:filter將對(duì)象化參數(shù)輸出到頁(yè)面流,具體過(guò)程包括向所述參數(shù)結(jié)構(gòu)中增加或減少內(nèi)容,利用ViewState將轉(zhuǎn)化成json對(duì)象的字符串輸出到頁(yè)面的〈script〉塊中,形成js的json對(duì)象。步驟S6回到頁(yè)面后,新頁(yè)面從js中獲取全局對(duì)象化參數(shù)、并進(jìn)行處理。圖2是根據(jù)本發(fā)明實(shí)施例的對(duì)象化傳參的系統(tǒng)的主要模塊的示意圖。如圖4所示,對(duì)象化傳參的系統(tǒng)主要包括轉(zhuǎn)化模塊;攔截模塊;存儲(chǔ)模塊;形成模塊;第一獲取模塊;及第二獲取模塊。轉(zhuǎn)化模塊用于通過(guò)頁(yè)面js將json對(duì)象轉(zhuǎn)化為字符串、并將所述字符串作為url參數(shù)的值,以系統(tǒng)實(shí)現(xiàn)約定的key進(jìn)行url參數(shù)的傳遞。所述轉(zhuǎn)化模塊還用于將json對(duì)象轉(zhuǎn)化為字符串之前,通過(guò)頁(yè)面js將需要傳遞的參數(shù)構(gòu)造成json對(duì)象。攔截模塊用于通過(guò)filter攔截特定參數(shù),并將其轉(zhuǎn)化為對(duì)象。所述攔截模塊還用于通過(guò)filter攔截request請(qǐng)求、并獲取特定key的value,將所述value轉(zhuǎn)化成對(duì)象。存儲(chǔ)模塊用于利用action的公共父類來(lái)存儲(chǔ)所述對(duì)象化后的參數(shù)。所述存儲(chǔ)模塊還用于將所述value轉(zhuǎn)化成的對(duì)象賦值給action的公共父類的屬性。形成模塊用于向所述參數(shù)結(jié)構(gòu)中增加或減少內(nèi)容,利用ViewState將轉(zhuǎn)化成json對(duì)象的字符串輸出到頁(yè)面的〈script〉塊中,形成js的json對(duì)象。第一獲取模塊用于使得action從所述父類中獲取對(duì)象化的參數(shù)、并完成邏輯的處理。第二獲取模塊用于使得新頁(yè)面從js中獲取全局對(duì)象化參數(shù)、并進(jìn)行處理。顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計(jì)算裝置來(lái)實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來(lái)實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)裝置中由計(jì)算裝置來(lái)執(zhí)行,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來(lái)實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。上述實(shí)例只為說(shuō)明本發(fā)明的技術(shù)構(gòu)思及特點(diǎn),其目的在于讓熟悉此項(xiàng)技術(shù)的人是能夠了解本發(fā)明的內(nèi)容并據(jù)以實(shí)施,并不能以此限制本發(fā)明的保護(hù)范圍。凡根據(jù)本發(fā)明精神實(shí)質(zhì)所做的等效變換或修飾,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。權(quán)利要求1.一種基于JSON進(jìn)行對(duì)象化參數(shù)傳遞的方法,其特征在于,所述方法包括以下步驟通過(guò)頁(yè)面js將json對(duì)象轉(zhuǎn)化為字符串、并將所述字符串作為url參數(shù)的值,以系統(tǒng)實(shí)現(xiàn)約定的key進(jìn)行url參數(shù)的傳遞;通過(guò)filter攔截特定參數(shù),并將其轉(zhuǎn)化為對(duì)象;利用action的公共父類來(lái)存儲(chǔ)所述對(duì)象化后的參數(shù);向所述參數(shù)結(jié)構(gòu)中增加或減少內(nèi)容,利用ViewState將轉(zhuǎn)化成json對(duì)象的字符串輸出到頁(yè)面的〈script〉塊中,形成js的json對(duì)象;action從所述父類中獲取對(duì)象化的參數(shù)、并完成邏輯的處理;回到頁(yè)面后,新頁(yè)面從js中獲取全局對(duì)象化參數(shù)、并進(jìn)行處理。2.根據(jù)權(quán)利要求1所述的基于JSON進(jìn)行對(duì)象化參數(shù)傳遞的方法,其特征在于所述方法將json對(duì)象轉(zhuǎn)化為字符串之前還包括如下步驟通過(guò)頁(yè)面js將需要傳遞的參數(shù)構(gòu)造成json對(duì)象。3.根據(jù)權(quán)利要求2所述的基于JSON進(jìn)行對(duì)象化參數(shù)傳遞的方法,其特征在于所述方法通過(guò)filter攔截特定參數(shù),并將其轉(zhuǎn)化為對(duì)象包括如下步驟通過(guò)filter攔截request請(qǐng)求、并獲取特定key的value,將所述value轉(zhuǎn)化成對(duì)象。4.根據(jù)權(quán)利要求3所述的基于JSON進(jìn)行對(duì)象化參數(shù)傳遞的方法,其特征在于所述方法利用action的公共父類來(lái)存儲(chǔ)所述對(duì)象化后的參數(shù)包括如下步驟將所述value轉(zhuǎn)化成的對(duì)象賦值給action的公共父類的屬性。5.一種基于JSON進(jìn)行對(duì)象化參數(shù)傳遞的系統(tǒng),其特征在于,所述系統(tǒng)包括轉(zhuǎn)化模塊用于通過(guò)頁(yè)面js將json對(duì)象轉(zhuǎn)化為字符串、并將所述字符串作為ur1參數(shù)的值,以系統(tǒng)實(shí)現(xiàn)約定的key進(jìn)行url參數(shù)的傳遞;攔截模塊用于通過(guò)filter攔截特定參數(shù),并將其轉(zhuǎn)化為對(duì)象;存儲(chǔ)模塊用于利用action的公共父類來(lái)存儲(chǔ)所述對(duì)象化后的參數(shù);形成模塊用于向所述參數(shù)結(jié)構(gòu)中增加或減少內(nèi)容,利用ViewState將轉(zhuǎn)化成json對(duì)象的字符串輸出到頁(yè)面的〈script〉塊中,形成js的json對(duì)象;第一獲取模塊用于使得action從所述父類中獲取對(duì)象化的參數(shù)、并完成邏輯的處理;第二獲取模塊用于使得新頁(yè)面從js中獲取全局對(duì)象化參數(shù)、并進(jìn)行處理。6.根據(jù)權(quán)利要求5所述的基于JSON進(jìn)行對(duì)象化參數(shù)傳遞的系統(tǒng),其特征在于,所述轉(zhuǎn)化模塊還用于將json對(duì)象轉(zhuǎn)化為字符串之前,通過(guò)頁(yè)面js將需要傳遞的參數(shù)構(gòu)造成json對(duì)象。7.根據(jù)權(quán)利要求6所述的基于JSON進(jìn)行對(duì)象化參數(shù)傳遞的系統(tǒng),其特征在于,所述攔截模塊還用于通過(guò)filter攔截request請(qǐng)求、并獲取特定key的value,將所述value轉(zhuǎn)化成對(duì)象。8.根據(jù)權(quán)利要求7所述的基于JSON進(jìn)行對(duì)象化參數(shù)傳遞的系統(tǒng),其特征在于,所述存儲(chǔ)模塊還用于將所述value轉(zhuǎn)化成的對(duì)象賦值給action的公共父類的屬性。全文摘要本發(fā)明公開了一種基于JSON進(jìn)行對(duì)象化參數(shù)傳遞的方法及系統(tǒng),所述方法包括將json對(duì)象轉(zhuǎn)化為字符串、并將字符串作為url參數(shù)的值;通過(guò)filter攔截特定參數(shù),并將其轉(zhuǎn)化為對(duì)象;利用action的父類來(lái)存儲(chǔ)所述對(duì)象化后的參數(shù);向參數(shù)結(jié)構(gòu)中增加或減少內(nèi)容,利用ViewState將轉(zhuǎn)化成json對(duì)象的字符串輸出到頁(yè)面的塊中,形成js的json對(duì)象;action從父類中獲取對(duì)象化的參數(shù)、并完成邏輯的處理;回到頁(yè)面后,新頁(yè)面從js中獲取全局對(duì)象化參數(shù)、并進(jìn)行處理。所述系統(tǒng)包括轉(zhuǎn)化模塊;攔截模塊;存儲(chǔ)模塊;形成模塊;第一獲取模塊;及第二獲取模塊。本發(fā)明使得復(fù)雜參數(shù)的傳參及多次傳參更加易于實(shí)現(xiàn)。文檔編號(hào)G06F9/44GK102508674SQ201110394879公開日2012年6月20日申請(qǐng)日期2011年12月2日優(yōu)先權(quán)日2011年12月2日發(fā)明者錢駿申請(qǐng)人:方正國(guó)際軟件有限公司