1

リストがあります。ユーザーはn個のアイテム番号と説明を追加できます。

彼は最初に追加し、次に追加するには[追加]ボタンを押します。

データを配列に格納し、次のレコードを取得するためにページにリダイレクトするアクションクラスを呼び出しています。

イテレータを使用していると、テキストボックスが再び追加されます。

イテレータを使用しない場合、アクションクラスにアクセスするたびに配列リストが無効化されます。

静的にすることはできません。配列リストを毎回初期化しないようにするか、イテレータを使用してテキストフィールドを繰り返さないようにするために誰かが助けてくれると役に立ちます。

<table>
  <tr align="center">
    <s:iterator value="preAdviceDetailsDO" id="preAdviceDetailsDO" status="outerStat">
      <s:if test="#outerStat.may be some useful word like even odd first == true">
        <td style="background: #CCCCCC">
          <s:textfield value="%{itemNumber}" name="preAdviceDetailsDO[%{#outerStat.index}].itemNumber" onblur="checkBarcode();"/>
        </td>

        <td style="background: #CCCCCC">
          <s:textfield value="%{itemDescription}" name="preAdviceDetailsDO[%{#outerStat.index}].itemDescription"/>
        </td>
      </s:if>
    </s:iterator>
  </tr>     
</table>
<input type="button" value="Add More" onclick="addRow()" />
4

1 に答える 1

1

編集してくれたデイブ・ニュートンに感謝します。MohanaRao SV さん、私はその解決策を実際には微調整で見つけました。上記のコードで直面していた問題は次のとおりです。

ユーザーが初めてフォームを表示すると、2 つのテキスト フィールドが表示されます。詳細を入力し、追加します。彼が追加ボタンを押す別のレコード。今度は、arraylist がインクリメントされます。したがって、フォームのテキスト フィールドは 4 つに増えます。これは、前の 2 つのテキスト フィールドと新しい 2 つのテキスト フィールドです。などなど...

だから、今私がしたことは、if 条件で、インデックスが最後かどうかをチェックしている場合です。フィールドを表示していて、else 部分でテキスト フィールドを追加するための同じコードを書いていますが、css プロパティ display:none を設定しています。

else の部分を書かないと、arraylist は適切にインクリメントされますが、arraylist の詳細は保持されません。

これで、必要なテキスト フィールドのみが表示されます。

于 2012-10-05T06:11:49.153 に答える