1

インデックス付きプロパティを使用しています (struts と Java/jsp を使用)。テーブル内の行/アイテムを追加/削除できる動的テーブルがあります。行の追加は意図したとおりに機能します。アクション クラスのフォームに新しい行が表示されます。削除された行は (明らかに) 設定されませんが、リストからも削除されません。void setItem(List)、void setItem(index)、Item getItem(index)、および List getItem() メソッドを実装しました。インデックス付きプロパティの動作に関する情報はあまり見つかりません。実装する必要があるリセット メソッドはありますか、それともインデックス付きプロパティが新しいリストの設定を処理することになっていますか? 私が知る限り、リストに残っているアイテムのみが設定され、それらは void setItem(Item) メソッドを使用して設定されます。

4

1 に答える 1

1
  • フォームがセッション スコープではなく、リクエスト スコープであることを確認してください
  • LazyListを使用します。

例えば:

private List<PropertyContact> contactsList = LazyList.decorate(new ArrayList<PropertyContact>(), PropertyContact.PROPERTY_CONTACT_FACTORY);

public static final Factory PROPERTY_CONTACT_FACTORY = new Factory() {
        @Override
        public Object create() {
            return new PropertyContact();
        }
    };

次に、次のように JSP でリストを表示/編集できます。

<c:forEach items="${profileForm.contactsList}" var="contact" varStatus="contactSta">
    <html:hidden styleClass="contact-id" property="contactsList[${contactSta.index}].id"/>
</c:forEach>

リストに要素を追加する場合は、最大値よりも大きいインデックスを設定してください。たとえば、私のリストに 3 つの要素が含まれている場合、新しい要素 (4 つ目) は次のようになります: (リストはゼロ インデックス ベースであることを思い出してください)

<input style="hidden" styleClass="contact-id" property="contactsList[3].id"/>

フォームが送信されると、リスト要素が削除されると、特定のインデックスに null が設定されます。たとえば、ユーザーが 2 番目の要素を削除すると、サーバーに次のように表示されます。

contactsList.get(1) == null;//remember that list are zero-index based
于 2010-08-31T17:11:24.033 に答える