2016-04-06 26 views
0

我有一个记录列表并想要更新一个。当我点击一个,它显示一个表单,所有输入字段已经使用JsonRest填充。我编辑了这些字段,现在我想将它发送到服务器进行更新。 如何使用dojo发送对象?使用dojo发送表单数据到弹簧控制器

我试过这样,但在控制器端的值为空。

on(dom.byId("poolForm"), "submit", function(evt) { 
      var formObj = domForm.toObject("poolForm"); 
      console.log(formObj); 

      request.post("/path/to/EditSubmit", { 
       data : formObj, 
       method : "POST" 
      }). then(function(data) { 
       console.log("data"); 
      }); 
}); 

在春天,我用:

public void editedForm(HttpServletResponse response, @RequestBody MyClass myClass) { 
    poolParam.getAdd(); 
} 

回答

1

假设你正在创造一个新的记录,而不是更新一个,你可以使用方法add(object, options)JsonRest

实施例:

require(["dojo/store/JsonRest"], function(JsonRest){ 
    // your store 
    var store = new JsonRest({ 
    target: "/some/resource" 
    }); 

    // add an object passing an id 
    store.add({ 
    foo: "foo" 
    }, { 
    id: 1 
    }); 
}); 

更详细的信息可以在JsonRest APIJsonRest guide找到。


编辑:

至于您的评论的要求,如果你想使用dojo/request/xhr,而不是JsonRest发送对象,你可以使用下面的例子,基本上是:

  • 使用dojo/dom-form实用程序,从表单中获取值。该实用程序函数将返回一个对象。 More info here

  • 使用dojo/request/xhr通过Ajax发送先前从dojo/dom-form检索到的对象,这是发送到服务器的数据。 More info here

快速演示在这里:

https://jsbin.com/mocoxuhotu/edit?html,output

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <meta charset="utf-8" /> 
    <link type="text/css" rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/dojo/1.10.0/dijit/themes/claro/claro.css"> 
    <script data-dojo-config="async: 1" src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script> 
    <script> 
     require([ 
      "dojo/query", 
      "dojo/dom-form", 
      "dojo/request/xhr", 
      "dijit/registry", 
      "dijit/form/Form", 
      "dojo/parser", 
      "dojo/domReady!" 
     ], function (
      query, 
      domForm, 
      xhr, 
      registry, 
      Form, 
      parser 
      ) { 

      var form = new Form({}, 'myForm'); 


      query("a.myLink").on("click", function() { 

       var data = domForm.toObject(form.domNode); 
       xhr.post("/echo/json", { 
        data: data // data to transfer 
       }).then(function() { 
        console.log("Success"); 
       }); 
      }); 
     }); 

    </script> 
</head> 
<body class="claro"> 

    <form data-dojo-type="dijit/form/Form" id="myForm"> 
     <fieldset> 
      <ul> 
       <li> 
        <label for="name">Name:</label> 
        <input type="text" name="name" /> 
       </li> 
       <li> 
        <label for="firstname">First name:</label> 
        <input type="text" name="firstname" /> 
       </li> 
      </ul> 
     </fieldset> 
    </form> 

    <a class="myLink">Submit the form</a> 
</body> 
</html> 
+0

我已经记录列表和点击事件中,我编辑的一个记录的不同值。然后我想通过调用我的弹簧控制器将值保存到数据库中。 – coder247

+0

嗨,我提供的例子只是告诉你如何做到这一点,基本上调用store.add()当你保存你的记录。如果您可以为我的表单提供您的代码的jsfiddle,我可以为您提供有关您的实际实施的更详细的示例。谢谢。 – GibboK

+0

但是不可能在没有创建商店的情况下使用dojo发送表单? – coder247