从浏览器中的javascript传递数组数据到使用ajax弹出mvc控制器

Alf*_*ong 20 javascript arrays ajax jquery spring-mvc

我想使用AJAX将数组从Web浏览器中的javascript传递给Spring MVC控制器

在javascript中,我有

var a = [];
a[0] = 1;
a[1] = 2;
a[2] = 3;

// how about multiple arrays as well?

$.ajax({
    type : "POST",
    url : "/myurl",
    data : //not sure how to write this, ("a="+a), ?
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 
Run Code Online (Sandbox Code Playgroud)

在Java中,我想创建一个从AJAX接收数据的类,并创建一个接收数据的类

package com.amazon.infratool.ui;

import lombok.Getter;
import lombok.Setter;


@Setter @Getter
public class RepairInfomationParameters {
//how to write this variable?
    List<String> a = null; // is it something like this?
}
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?谢谢!

Viv*_*ath 32

你可以从JavaScript方面做到这一点:

$.ajax({
    type : "POST",
    url : "/myurl",
    data : {
        myArray: a //notice that "myArray" matches the value for @RequestParam
                   //on the Java side
    },
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 
Run Code Online (Sandbox Code Playgroud)

然后在Java端(在Spring 3中),假设此方法通过以下方式映射/myurl:

public String controllerMethod(@RequestParam(value="myArray[]") Integer[] myArray){
    ....
}
Run Code Online (Sandbox Code Playgroud)

我相信以下内容也会奏效:

public String controllerMethod(@RequestParam(value="myArray[]") List<Integer> myArray){
    ....
}
Run Code Online (Sandbox Code Playgroud)

Spring很聪明,可以弄清楚如何进行绑定.

对于多个阵列,您可能只想拥有一个命令对象:

public class MyData {
    private List<Integer> firstArray;
    private List<Integer> secondArray;
    private List<Integer> thirdArray;

    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后在JavaScript方面:

$.ajax({
    type : "POST",
    url : "/myurl",
    data : {            
        myData: {
           "firstArray": firstArray,
           "secondArray": secondArray,
           "thirdArray": thirdArray
        }            
    },
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 
Run Code Online (Sandbox Code Playgroud)

在Java端,您可以使用@ModelAttribute以下命令进行绑定:

public String controllerMethod(@ModelAttribute(value="myData") MyData myData) throws ParseException {
    ....
}
Run Code Online (Sandbox Code Playgroud)

编辑

更改了@RequestParam注释以使用myArray[]而不仅仅是myArray,因为此更改似乎是在首次发布此答案后在Spring中进行的.


a.v*_*hev 5

当您牢记要从字符串中解析数据时,将此类数据传递给Spring MVC控制器非常简单。因此,如果要在控制器中获取数组/列表,请传递该数组的字符串化版本:

public String method(
        @RequestParam(value = "stringParam") String stringParam,
        @RequestParam(value = "arrayParam") List<String> arrayParam) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

与jQuery对应的javascript就像:

$.post("/urlToControllerMethod",
    {
        "stringParam" : "test",
        "arrayParam" : [1, 2, 3, "test"].toString()
    }
);
Run Code Online (Sandbox Code Playgroud)

注意:参数类型

List<String> arrayParam
Run Code Online (Sandbox Code Playgroud)

可以用等效的数组替换

String[] arrayParam
Run Code Online (Sandbox Code Playgroud)


red*_*hka 5

除非你使用,否则Vivin Paliath不起作用 myArray[]

public String controllerMethod(@RequestParam(value="myArray[]") Integer[] myArray){
    ...
}
Run Code Online (Sandbox Code Playgroud)