首页 > 解决方案 > 如何通过 ajax 调用将 HTML 表单提交中的表数据发送到 Spring MVC 控制器

问题描述

假设我有一个类似于此格式的 HTML 表格

<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" 标题下有两行。

我需要通过表单将这些数据发送到带有AjaxSpring 控制器,在该控制器中我可以在模型中迭代地获取或设置每一行的值。我不知道如何实现这一点。这就是如何将表中的数据发送到 spring 控制器方法并获取值。

帮助处理代码段!谢谢

标签: ajaxspring-mvcjsphtml-tableform-data

解决方案


虽然前面的答案是正确的,但我还是建议引入一个包含三个字段的类nameseriesvalue。这个类应该有一个有意义的名字。在这里我命名它MyObject是因为我不知道你的应用程序是关于什么的。

我的对象

public class MyObject {

    private String name, series;
    private Integer value;

    // Getters and setters
}

控制器(返回类型可能不同)

@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
    });
});

推荐阅读