2016-04-06 25 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