4

したがって、私のコマンドオブジェクトには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 の値を更新する方法はありますか?

4

2 に答える 2

2

実際にこれを使用する必要があります:

<form:input path="availableProducts[${product}]" />

これはもちろん、コマンドオブジェクトが「クレジット」であり、投稿からのもののように聞こえる場合です。

于 2012-10-18T14:28:39.347 に答える
0

次のようなものを使用する必要があると思います:

<form:input path="${availableProductEntry[product]}" />

JavaBeans の命名規則 (getBean() および setBean()) に準拠する必要があるため、Map を使用することはできません。

于 2012-10-18T10:33:16.140 に答える