したがって、私のコマンドオブジェクトにはpublic Map<ProductVO, String> availableProducts;
、サイトのさまざまな製品/サービスをキーとして保持し、ユーザーが購入したい金額を値として保持する があります。通常のゲッター/セッターはもちろん提供されています。
このマップは (HashMap として) インスタンス化され、セットアップ手順中にデータベースのすべての製品が取り込まれ、すべての値は最初は「0」に設定されます。
jsp には、各製品を 1 行に表示するテーブルがあり、各行には product.description、product.price、およびユーザーが必要な製品の数を入力するか、ゼロのままにしておくことができる入力フィールドがあります。 (数値以外の検証について心配する必要はありません。別の場所で処理されます)。
私の JSTL foreach は次のようになります。
<c:forEach var="availableProductEntry" items="${credit.availableProducts}">
<c:set var="product" value="${availableProductEntry.key}" />
<tr>
<td>${product.description}</td>
<td>${product.price}"</td>
<td><form:input path="${availableProductEntry.value}" /></td>
</tr>
</c:forEach>
これは表示には問題なく機能します。つまり、テーブルは希望どおりに表示され、すべての製品が繰り返されて表示され、説明、価格、およびフィールドの初期値が正しくなります。
ただし、フィールドにいくつかの数値を入力して送信すると、コマンド オブジェクトを調べたところ、マップの値が更新されたようには見えず、すべて「0」のままです。
私はおそらくそのpath="${availableProductEntry.value}"
部分を間違っています。
動的に生成された入力フィールドを取得して、最初に値を取得した Map の値を更新する方法はありますか?