3

ユーザーがドロップダウンボックスで選択したものに基づいて画像を更新しようとしています (送信などをクリックする必要はありません)。オプションを利用できます:

var hash = new Array();
hash['<s:property value="itemLists[1][0].id"/>']=0;
hash['<s:property value="itemLists[1][1].id"/>']=1;
hash['<s:property value="itemLists[1][2].id"/>']=2;
hash['<s:property value="itemLists[1][3].id"/>']=3;
hash['<s:property value="itemLists[1][4].id"/>']=4;
hash['<s:property value="itemLists[1][5].id"/>']=5;
hash['<s:property value="itemLists[1][6].id"/>']=6;
hash['<s:property value="itemLists[1][7].id"/>']=7;
var item= new Array();
item[0] = '<s:property value="itemLists[1][0].image"/>';
item[1] = '<s:property value="itemLists[1][1].image"/>';
item[2] = '<s:property value="itemLists[1][2].image"/>';
item[3] = '<s:property value="itemLists[1][3].image"/>';
item[4] = '<s:property value="itemLists[1][4].image"/>';
item[5] = '<s:property value="itemLists[1][5].image"/>';
item[6] = '<s:property value="itemLists[1][6].image"/>';
item[7] = '<s:property value="itemLists[1][7].image"/>';

これは明らかに具体的すぎるので、リスト内のすべての項目に対してこれを行う for ループを作成する方法があるかどうか疑問に思っていました。問題は struts2 から発生します -'<s:property value="itemLists[1][#].id"/>'ページが最初にロードされたときに評価され、その「文字列」は途中でイテレータ変数を持つ 2 つの部分に分割できません。Javascript関数内のstruts2配列でforループを使用する方法はありますか?

4

1 に答える 1

5

上記のループのいずれかでおよそ (読み取り: 未テスト):

var items = [];
<s:iterator list="itemLists[1]" var="item" varStatus="stat">
  items.push('<s:property value="#item[#stat.index].image"/>');
</s:iterator>

破損を避けるために、文字列を JS エスケープする必要もあります。


私は別々の配列に疑問を呈します。JS には、匿名オブジェクト表記があります{ id: 0, image: "ohai" }。私はそれを使用します。それは物事を扱いやすくします。これは次のようになります。

var items = [];
<s:iterator list="itemLists[1]" var="item" varStatus="stat">
  items.push({
    id:    '<s:property value="#item[#stat.index].id"/>',
    image: '<s:property value="#item[#stat.index].image"/>
  });
</s:iterator>

JSP タグが行うことはすべて、クライアントに送信するテキストを作成することです。

テキストが何であれ、それが JavaScript ソースにならない理由はありません。

データを JSON/straight JS として公開し、忙しい作業の多くを回避することもできます。

于 2012-12-05T21:35:30.057 に答える