代码之家  ›  专栏  ›  技术社区  ›  Skadoosh

如何通过ajax调用将HTML表单提交的表数据发送到Spring MVC控制器

  •  0
  • Skadoosh  · 技术社区  · 6 年前

    <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>
    

    在“名称”、“系列”和“值”标题下有两行。

    我需要通过 形式 服从 具有 阿贾克斯 我不知道怎样才能做到这一点。这就是如何将表中的数据发送到spring控制器方法并获取值。

    代码段帮助!

    2 回复  |  直到 6 年前
        1
  •  0
  •   Alien    6 年前

    使用javascript/jquery可以很容易地做到这一点。

    <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代码来设置多行的隐藏字段值,如下所示 Call javascript function with if JSTL

        2
  •  0
  •   Romain Warnan    6 年前

    name , series value . 我给它起了名字 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
        });
    });