使用 dojo 将表单数据发送到 spring 控制器
Sending form data to spring controller using dojo
我有一个记录列表,想更新一个。当我单击其中一个时,它会显示一个表单,其中包含已使用 JsonRest 填充的所有输入字段。我已经编辑了字段,现在我想将它发送到服务器进行更新。
如何使用 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");
});
});
在spring中我使用了:
public void editedForm(HttpServletResponse response, @RequestBody MyClass myClass) {
poolParam.getAdd();
}
假设您正在创建一条新记录而不是更新一条记录,您可以使用方法 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 API and JsonRest guide 找到更多信息。
编辑:
至于您的评论请求,如果您想使用 dojo/request/xhr
而不是 JsonRest
发送对象,您基本上可以使用以下示例:
使用 dojo/dom-form
实用程序,从您的表单中获取值。这个效用函数将 return 一个对象。 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>
我有一个记录列表,想更新一个。当我单击其中一个时,它会显示一个表单,其中包含已使用 JsonRest 填充的所有输入字段。我已经编辑了字段,现在我想将它发送到服务器进行更新。 如何使用 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");
});
});
在spring中我使用了:
public void editedForm(HttpServletResponse response, @RequestBody MyClass myClass) {
poolParam.getAdd();
}
假设您正在创建一条新记录而不是更新一条记录,您可以使用方法 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 API and JsonRest guide 找到更多信息。
编辑:
至于您的评论请求,如果您想使用 dojo/request/xhr
而不是 JsonRest
发送对象,您基本上可以使用以下示例:
使用
dojo/dom-form
实用程序,从您的表单中获取值。这个效用函数将 return 一个对象。 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>