17

SpringMVC と Spring フォームを使用するときに、動的フォームを処理する (js を介してフォーム項目を dom に追加する) より簡単でより良い方法があるかどうか疑問に思っていますか?

多くの LineItems を持つ Invoice オブジェクトを持つ画像。

public class Invocie {
    private List LineItems;

    public Invoice() {
        lineItems = ListUtils.lazyList(new ArrayList<LineItem>(), FactoryUtils.instantiateFactory(LineItem.class));
    }
}

現在使用している請求書に属するアイテムを表示するには

<forEach items="${invoice.lineItems}" varStatus="i">
  <form:input path="lineItems[${i.index}].productName" />
</c:forEach>

LineItems を追加するために、新しいインデックスを計算して DOM に追加する js がいくつかあります。LineItem を削除するとき、現在すべてのインデックスの番号を付け直す必要がありますが、それは避けたい部分です。それは可能ですか?

4

4 に答える 4

11

クライアント側でjQueryを使用し、バッキングオブジェクトを形成するためのSprings AutoPopulatingリストを使用して、これを解決するのに役立つチュートリアルを実装しました。

http://eggsylife.co.uk/2009/11/30/spring-forms-dynamic-lists-and-ajax/

Webarchiveからのリンクを編集https://web.archive.org/web/20160729163958/http://eggsylife.co.uk/2009/11/30/spring-forms-dynamic-lists-and-ajax/

于 2009-12-01T17:03:55.880 に答える
1

JSPでアイテムを追加/設定する際のエラーを回避するには、GrowthListで装飾することも必要であることがわかりました。(また、基本的に二重装飾を行うカスタムSpringList implを作成しました。)

lineItems = GrowthList.decorate(ListUtils.lazyList(new ArrayList<LineItem>(), FactoryUtils.instantiateFactory(LineItem.class)));

同意します。問題は確かにアイテムを削除することです。

あなたができることは、htmlのスプリングマーカー構文を使用することです。したがって、javascriptを使用してリストからアイテム(たとえばインデックス2)を削除すると、そのインデックスに次のマークが付けられます。

<input type="hidden" name="_lineItems[2]">

次に、フォームが送信されると、春にマーカーが表示され、lineItems 2の空のアイテム(レイジーリストファクトリに基づく)が無視されずに配置されます。

于 2009-07-14T00:05:44.880 に答える
1

私は今日この問題に苦労しており、ここで説明されているいくつかの解決策を見つけました。

于 2010-12-29T19:57:27.517 に答える