3

ArrayList型のセッション変数があります。jspページでは、フォームを動的に作成するためにインデックスでアクセスする必要がありますが、フォームを送信した後、セッションArrayListの要素値が変更されていないことがわかりました。

これが私のJSPページで試したものです(私はstruts2 Frameworkを使用しています):

<s:iterator value="anotherArray" status="RowsIterator">
 <tr>
  <td>
   <s:iterator value="actionOptionsArray" status="iter">
    <s:radio
     name="#session.chosenActionsArray[%{#RowsIterator.index}]" <!-- The concerned line -->
     list="%{actionOptionsArray[#iter.index]}"
     value="#{actionOptionsArray[0]}"
     theme="simple" />
    <br>
   </s:iterator>
  </td>
  <!-- other fields--> 
 </tr>
</s:iterator>

anotherArray#session.chosenActionsArrayのサイズは同じです。

間違って反復していると思いますが、私の場合、インデックスで反復するのは義務です。よろしくお願いします:)

4

1 に答える 1

1

アクションを介してセッションにアクセスする必要があります。セッションは jsp からアクセスできますが、このように外界から直接アクセスすることはできません。

フォームを送信するアクションに、SessionAware を実装してもらいます。適切な検証とともに ArrayList のゲッター/セッターを作成し、execute メソッドを介してそれらの値をセッションに移動します。私はあなたのセッションを外の世界に直接公開するのが好きではありません (アクションでセッションのセッターを提供します)...これを行う場合は、悪意のあるユーザーにあなたがアクセスしたものへのアクセスを許可した可能性があることに注意する必要があります期待していなかったかもしれません。

編集

アクションに「matrix」と呼ばれる文字列の ArrayList の ArrayList があるとします...次の方法でプロパティを反復できます。

<s:iterator value="matrix">
  <s:iterator>
    <s:property/>
  </s:iterator>
</s:iterator>

外側の反復子は、各インスタンスを値スタックの一番上にプッシュする「マトリックス」を反復処理します。内側の反復子は、プロパティ タグと同じように、デフォルトでスタックの一番上にあるものを使用します。tr 要素と td 要素を適切な場所に配置すると、テーブルをレンダリングできます。

入力要素 (おそらく非表示の要素) の正しい名前属性を生成するには、i と j が整数で、適切な行列を定義する、matrix[i][j] の形式が必要です。あなたが行ったように iterator の status 属性を使用することは、インデックスを生成する良い方法です。

于 2012-09-01T20:57:58.090 に答える