2012-11-23 130 views
0

我正在使用DOJO 1.8 iand spring mvc。我想將我的表單字段轉換爲JSON對象並將其傳遞給控制器​​。使用DOJO dom-form.toObject(「myForm1」)我能夠將Json傳遞給控制器​​,如果它是一個簡單的對象。使用DOJO將表單字段轉換爲JSON嵌套對象

如果我的模型對象具有內部對象,那麼.toObject()無法將其轉換爲嵌套的JSON對象。

var formObject1 = domForm.toObject("myForm1"); 
    alert("hi"); 
    require(["dojo/json"], function(JSON){ 
     postData = JSON.stringify(formObject1); 
    }); 

    dojo.byId("testdiv").innerHTML = postData; 

和JSON的,我得到的是

{ 「名字」: 「12345」, 「中間名」: 「喬安娜」, 「姓氏」: 「伊麗莎」, 「address.addrLine1」 : 「ADD1」, 「address.addrLine2」: 「ADD2」, 「address.addrLine3」: 「ADD3」, 「電子郵件」: 「12345」}

但我需要如下,

{「firstName」:「12345」,「middleName」:「J oanna「,」lastName「:」Eliza「,」address「:{」addrLine1「:」add1「,」addrLine2「:」add2「,」addrLine3「:」add3「},」email「:」12345「 }

DOJO是否支持這種類型的JSON轉換?

+0

你肯定的是,Spring MVC不處理的名稱,如如果您發佈表單,「address.addrLine1」是否正確?您是否真的嘗試過發佈與'xhr.post({form:「myForm1」,url:...,...})? – James

+0

我正在使用request.post。 'require([「dojo/request」,「dojo/dom-form」],function(request,domForm){ \t \t request.post(「http:// localhost:8080/Caseview/saveForm」,{ \t \t \t數據:domForm.toObject( 'myForm的'), \t \t handleAs: 「JSON」 \t \t})然後(函數(數據){ \t \t //做某事 \t \t},函數(e)中。 { \t \t //處理錯誤 \t \t}); \t \t});' 我有一個模型類,其地址地址作爲實例參數,Adress將此地址線1作爲實例變量。如果我正在傳遞address.addressline1,我正在獲得一個如下所示的消息...(請參閱下面的註釋) – JSFUser

+0

org.codehaus.jackson.map.exc.UnrecognizedPropertyException:無法識別的字段「address.addrLine1」(Class com.sfg.model。 CallerName),在[Source:[email protected];行:1,列:83](通過參考鏈:com.sfg.model.CallerName [「address.addrLine1」]) – JSFUser

回答

0

道場有這種任務的各種方法。只要看看documentation並選擇合適的解決方案。

+0

感謝您的即時回覆....我試圖用這個domForm.toObject(「myForm1」)只使用這個.....但我得到的JSON爲{「名字」:「12345」,「middleName」:「喬安娜」,「lastName」:「伊麗莎「,」address.addrLine1「:」add1「,」address.addrLine2「:」add2「,」address.addrLine3「:」add3「,」email「:」12345「}但我需要在嵌套對象中提到以上。在你給出的鏈接中沒有提及任何事情...... – JSFUser

+0

你有代表表單的對象,循環並重新組合。 – undefined

+0

ohhh確定....這意味着我必須手動安排它.... DOJO不以這種方式給予JSON禮儀? – JSFUser

0

一個簡短的功能,將做的工作:

// lang = require("dojo/_base/lang"); 
function deepenObject(/*Object*/ object) {  
    object = lang.clone(object); 
    for(var key in object) { 
     if(object.hasOwnProperty(key) && ~key.indexOf(".")) { 
      lang.setObject(key, object[key], object); 
      delete object[key]; 
     }  
    } 
    return object; 
} 

然後,只需:

var result = deepenObject(formObject1); 

看到它在行動:http://jsfiddle.net/phusick/gaJ8C/