如何通过 ajax 调用 Spring MVC 控制器从 HTML 表单提交发送 table 数据
How to send table data from HTML form submit via ajax call to Spring MVC controller
假设我有一个 HTML table 格式类似于
<form> <table id="a">
<thead>
<th>Name</th>
<th>Series</th>
<th>Value</th>
</thead>
<tbody id="b">
<tr><td>Enhancer</td><td>Enhancement</td><td>50</td></tr>
<tr><td>Plans</td><td>Plan</td><td>50</td></tr>
</tbody>
</table>
<input type="submit" value="Send" action="SomeControllerAction" /></form>
在标题 "Name"、"Series" 和 "Value" 下有两行。
我需要通过 表单 将此数据发送到 Spring 控制器 Ajax 我可以在其中迭代地获取或设置模型中每一行的值。
我不确定如何实现这一点。这就是如何将 table 中的数据发送到 spring 控制器方法并获取值。
帮助代码段!
谢谢
使用 javascript/jquery 您可以轻松做到这一点。
在迭代 table 内容时生成一个输入类型隐藏文本字段,如下所示具有相同名称。
<tbody id="b">
<tr>
<td>
<input type="hidden" name="Name" value="Enhancer" />
Enhancer
</td>
<td>
<input type="hidden" name="Series" value="Enhancement" />
Enhancement
</td>
<td>
<input type="hidden" name="Value" value="50" />
50
</td>
</tr>
</tbody>
然后按名称获取所有隐藏字段值,如下所示。
$("[name='Name']").val();
$("[name='Series']").val();
$("[name='Value']").val();
然后在控制器中接受这些参数作为如下数组。
@RequestMapping(method = RequestMethod.POST, produces = "text/html")
public String create(@RequestParam(value = "Name") String[] Name,
@RequestParam(value = "Series") String[] Series,
@RequestParam(value = "Value") String[] Value,
BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest){
//code goes here
}
注意:您必须编写 javascript 代码来为多行设置隐藏字段值,例如
虽然前面的答案是正确的,但我建议引入一个包含三个字段的class:name
、series
和value
。
这个 class 应该有一个有意义的名字。
这里我把它命名为MyObject
因为我不知道你的应用是什么
MyObject :
public class MyObject {
private String name, series;
private Integer value;
// Getters and setters
}
Controller(return 类型可能不同)
@PostMapping("/series")
@ResponseBody
public List<MyObject> postSeries(@RequestBody List<MyObject> myObjects) {
myObjects.forEach(System.out::println);
// Handle myObjects
return myObjects;
}
JSP
<table id="tableMyObjects">
<thead id="a">
<tr>
<th>Name</th>
<th>Series</th>
<th>Value</th>
</tr>
</thead>
<tbody id="b">
<tr>
<td><input type="text" name="name" /></td>
<td><input type="text" name="series" /></td>
<td><input type="text" name="value" /></td>
</tr>
<tr>
<td><input type="text" name="name" /></td>
<td><input type="text" name="series" /></td>
<td><input type="text" name="value" /></td>
</tr>
</tbody>
</table>
<button id="postButton">Post myObjects</button>
jQuery
$('#postButton').click(function() {
var myObjects = [];
$('#b tr').each(function(index, item) {
var $item = $(item);
myObjects.push({
name: $item.find("td input[name='name']").val(),
series: $item.find("td input[name='series']").val(),
value: $item.find("td input[name='value']").val(),
});
});
$.ajax({
url: '/series',
method: 'POST',
contentType : 'application/json; charset=utf-8',
data: JSON.stringify(myObjects)
})
.done(function(myObjects) {
// handle success
})
.fail(function() {
// handle fail
});
});
假设我有一个 HTML table 格式类似于
<form> <table id="a">
<thead>
<th>Name</th>
<th>Series</th>
<th>Value</th>
</thead>
<tbody id="b">
<tr><td>Enhancer</td><td>Enhancement</td><td>50</td></tr>
<tr><td>Plans</td><td>Plan</td><td>50</td></tr>
</tbody>
</table>
<input type="submit" value="Send" action="SomeControllerAction" /></form>
在标题 "Name"、"Series" 和 "Value" 下有两行。
我需要通过 表单 将此数据发送到 Spring 控制器 Ajax 我可以在其中迭代地获取或设置模型中每一行的值。 我不确定如何实现这一点。这就是如何将 table 中的数据发送到 spring 控制器方法并获取值。
帮助代码段! 谢谢
使用 javascript/jquery 您可以轻松做到这一点。
在迭代 table 内容时生成一个输入类型隐藏文本字段,如下所示具有相同名称。
<tbody id="b">
<tr>
<td>
<input type="hidden" name="Name" value="Enhancer" />
Enhancer
</td>
<td>
<input type="hidden" name="Series" value="Enhancement" />
Enhancement
</td>
<td>
<input type="hidden" name="Value" value="50" />
50
</td>
</tr>
</tbody>
然后按名称获取所有隐藏字段值,如下所示。
$("[name='Name']").val();
$("[name='Series']").val();
$("[name='Value']").val();
然后在控制器中接受这些参数作为如下数组。
@RequestMapping(method = RequestMethod.POST, produces = "text/html")
public String create(@RequestParam(value = "Name") String[] Name,
@RequestParam(value = "Series") String[] Series,
@RequestParam(value = "Value") String[] Value,
BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest){
//code goes here
}
注意:您必须编写 javascript 代码来为多行设置隐藏字段值,例如
虽然前面的答案是正确的,但我建议引入一个包含三个字段的class:name
、series
和value
。
这个 class 应该有一个有意义的名字。
这里我把它命名为MyObject
因为我不知道你的应用是什么
MyObject :
public class MyObject {
private String name, series;
private Integer value;
// Getters and setters
}
Controller(return 类型可能不同)
@PostMapping("/series")
@ResponseBody
public List<MyObject> postSeries(@RequestBody List<MyObject> myObjects) {
myObjects.forEach(System.out::println);
// Handle myObjects
return myObjects;
}
JSP
<table id="tableMyObjects">
<thead id="a">
<tr>
<th>Name</th>
<th>Series</th>
<th>Value</th>
</tr>
</thead>
<tbody id="b">
<tr>
<td><input type="text" name="name" /></td>
<td><input type="text" name="series" /></td>
<td><input type="text" name="value" /></td>
</tr>
<tr>
<td><input type="text" name="name" /></td>
<td><input type="text" name="series" /></td>
<td><input type="text" name="value" /></td>
</tr>
</tbody>
</table>
<button id="postButton">Post myObjects</button>
jQuery
$('#postButton').click(function() {
var myObjects = [];
$('#b tr').each(function(index, item) {
var $item = $(item);
myObjects.push({
name: $item.find("td input[name='name']").val(),
series: $item.find("td input[name='series']").val(),
value: $item.find("td input[name='value']").val(),
});
});
$.ajax({
url: '/series',
method: 'POST',
contentType : 'application/json; charset=utf-8',
data: JSON.stringify(myObjects)
})
.done(function(myObjects) {
// handle success
})
.fail(function() {
// handle fail
});
});