【问题标题】:Conversion form fields to JSON nested objects using DOJO使用 DOJO 将表单字段转换为 JSON 嵌套对象
【发布时间】:2012-11-25 20:05:56
【问题描述】:

我正在使用 DOJO 1.8 i 和 spring mvc。我想将表单字段转换为 JSON 对象并将其传递给控制器​​。使用 DOJO dom-form.toObject("myForm1") 如果它是一个简单的对象,我可以将 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 是

{"firstName":"12345","middleName":"Joanna","lastName":"Eliza","address.addrLine1":"add1","address.addrLine2":"add2","address .addrLine3":"add3","email":"12345"}

但我需要如下,

{"firstName":"12345","middleName":"Joanna","lastName":"Eliza","address":{"addrLine1":"add1","addrLine2":"add2 ","addrLine3":"add3"},"email":"12345"}

DOJO 是否支持这种类型的 JSON 转换?

【问题讨论】:

  • 如果您发布表单,您确定 Spring MVC 不能正确处理“address.addrLine1”之类的名称吗?您是否真的尝试过发布它,例如xhr.post({form: "myForm1", url: ..., ...})?
  • 我正在使用 request.post。 'require(["dojo/request","dojo/dom-form"], function(request,domForm){ request.post("localhost:8080/Caseview/saveForm", { data: domForm.toObject('myForm'), handleAs: "json" }).then(function(data){ // 做某事 }, function(e){ // 处理错误 }); });'我有一个模型类,其中 Address address 作为实例参数,Adress 将此 addressline1 作为实例变量。如果我通过 address.addressline1 我得到一个如下的异常......(见下面的评论)
  • org.codehaus.jackson.map.exc.UnrecognizedPropertyException:无法识别的字段“address.addrLine1”(类 com.sfg.model.CallerName),在 [来源:org.apache. catalina.connector.CoyoteInputStream@135d392;行:1,列:83](通过引用链:com.sfg.model.CallerName["address.addrLine1"])

标签: javascript json dojo


【解决方案1】:

Dojo 有各种各样的方法来完成这种任务。只需查看documentation 并选择合适的解决方案。

【讨论】:

  • 感谢您的即时回复......我尝试使用这个 domForm.toObject("myForm1") 只使用这个......但我得到的 json 是 {"firstName":" 12345","middleName":"Joanna","lastName":"Eliza","address.addrLine1":"add1","address.addrLine2":"add2","address.addrLine3":"add3"," email":"12345"}。但我需要在上面提到的嵌套对象中使用它。在您提供的链接中并没有说明任何事情......
  • 你有代表表单的对象,遍历它并重新组合它。
  • ohhh ok ....这意味着我必须手动安排它....DOJO 不会以这种方式提供 JSON 吗?
  • 我不这么认为。至少从我对你的问题的理解来看。输入名称只是名称,无论前缀如何。 :(
【解决方案2】:

一个可以完成这项工作的简短函数:

// 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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2023-01-16
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    相关资源
    最近更新 更多