0

以下のデータは、サーブレットから JSP に返されます。

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

フォームデータは[[A, D], [, E], [B], [], [], [C]]

jspでjavascriptを使用して上記のリストをループできません。

formdata を変数に割り当ててみましたが、以下のようにインデックスを使用してアクセスしました

JSP の場合:

var myData = "${formData}";

var i=0;

var j=0;

alert(myData[i][j]) 

alert は、値が未定義として表示されます。

formData リストをループする方法を教えてください。

4

3 に答える 3

1

JavaScriptソースのjspからの文字列の二次元コレクションのtoStringを印刷することは良い考えだとは思いません。これは、トランスポート/表現言語が作成された目的の 1 つです。このため、その 2 次元コレクションの JSON 表現を出力することをお勧めします。JavaScript ソース コードで必要なのは、String の 2 次元配列です。

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

二重引用符が重要です。二重引用符がないと、生成された JavaScript 配列は変数 (A、D、E、B、C) の 2 次元配列になります。

たとえば、Gson (Google 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 では以下のようにインデックスを使用してアクセスしました: [...]」) を引用します)、スクリプトレットや JSTL など、さまざまな方法でそれを行うことができます。

何をしなければならないのかよくわかりません。質問で使用した用語が少し不正確です。JSP によって記述された 2 次元配列で 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 に答える