0

以下数据从 Servlet 返回到 JSP。

List< List < String > > formData = new ArrayList< List< String > >();

formData 有[[A, D], [, E], [B], [], [], [C]]

我无法在 jsp 中使用 javascript 遍历上面的列表。

我尝试将 formdata 分配给一个变量并使用索引访问它,如下所示

在 JSP 中:

var myData = "${formData}";

var i=0;

var j=0;

alert(myData[i][j]) 

警报将值显示为未定义。

请让我知道如何遍历 formData 列表。

4

3 回答 3

1

我认为在 javascript 源代码中打印来自 jsp 的双向字符串集合的 toString 不是一个好主意。这是创建传输/表示语言的目的之一。出于这个原因,我建议打印该二维集合的 JSON 表示。您需要在 JavaScript 源代码中,String 的二维数组是:

[["A", "D"], [, "E"], ["B"], [], [], ["C"]]

注意双引号,这些很重要,没有这些,生成的 javascript 数组是变量(A、D、E、B、C)的二维数组。

例如,使用 Gson(谷歌 json 库),在 Java 中我会像这样创建 formData:

Gson gson = new Gson();
String toPrintInTheJSP = gson.toJson(<your Java bidimensional collection of strings here>);

在 JSP 中我会输出:

var myData = ${formData}; //without the double quotes
var i=0, j=0;
alert(myData[i][j]) 

如果您需要循环浏览 JSP 中的集合(这意味着在生成标记时(我引用,“我尝试将 formdata 分配给一个变量并使用如下索引在 JSP 中访问它:[...]”),有执行此操作的不同方法,例如 scriptlet 或 JSTL。

我不太确定您必须做什么,您在问题中使用的术语有点不精确。我认为您需要在由 JSP 编写的二维数组上循环使用 JavaScript。

如果必须在 JavaScript 中循环遍历数组,则需要一个嵌套循环,如下所示:

    var myData = [["A", "D"], [, "E"], ["B"], [], [], ["C"]];
    for (var i = 0; i < myData.length; i++){
        for(var j = 0; j < myData[i].length; j++){
            alert(myData[i][j]);
        }
    }
于 2012-07-13T19:39:18.617 回答
0

删除${formdata}JSP 中的括号:

var myData = ${formData};

var i=0;

var j=0;

alert( myData[i][j] ) ;

您正在将字符串分配给myData. 要遍历数组,您需要使用解析该字符串JSON.parse()或直接将其分配为数组,如上所示。

于 2012-06-15T10:02:40.437 回答
0
var myData = "${formData}";

转换为:

var myData = "[[A, D], [, E], [B], [], [], [C]]";

在 javascript 中,要创建一个数组,您必须使用:

var myData = [[A, D], [, E], [B], [], [], [C]];
于 2012-06-15T10:02:58.423 回答