2

と がありitemList、それぞれitemについて、評価のドロップダウン リストが表示されます。ユーザーがそれぞれitemに料金を付けた後itemList、それらの料金を配列に保存したいと思います。どうすればいいですか?selectedRate以下はIntegerタイプであり、コードは問題を解決できませんでした。

<logic:iterate id="item" name="itemList">
  <tr>
    <td>
      <html:select name="aForm" property="selectedRate">
        <html:optionsCollection name="allRates" label="description" value="value" />
      </html:select>
    </td>
  </tr>
</logic:iterate>
4

1 に答える 1

4

selectオプションは、特定のアイテムに関連付ける必要があります。

最も簡単な方法は、 のコレクションを使用し、それぞれにプロパティItemを与えることです。この例ではを使用しました。ItemratingInteger

<html:select>配列表記を使用し、各アイテムの評価を直接設定します。(フォーム自体のレートのリストと、より単純なレイアウトを使用しています。これらの違いは無視してください。)

<logic:iterate id="item" name="ratesForm" property="itemList" indexId="i">
  ${item.name}&nbsp;
  <html:select property="itemList[${i}].rating">
    <html:optionsCollection name="ratesForm" property="rates" label="description" value="value" />
  </html:select>
  <br/>
</logic:iterate>

このアクションは、期待どおりにアイテムの評価にアクセスします。

RatesForm ratesForm = (RatesForm) form;
List<Item> items = ratesForm.getItemList();
for (Item item : items) {
    System.out.println(item.rating);
}

アイテムに評価が関連付けられていない場合は、アイテム ID キーと評価値のマップを使用する必要があります。これはもっと複雑です。コレクションをお勧めします。

Map<String, Object>まず、インデックス付きプロパティが機能する方法が原因でマップが作成されます。マップ自体の通常の getter に加えて、インデックス付きメソッドを提供します。

private Map<String, Object> itemRatings;

public Map<String, Object> getItemRatings() {
    return itemRatings;
}

public Object getItemRating(String key) {
    return itemRatings.get(key);
}

public void setItemRating(String key, Object val) {
    itemRatings.put(key, val);
}

JSP も同様ですが、"()" 代わりに "[]"インデックス付きフォーム メソッドを使用します。

<logic:iterate id="item" name="ratesForm" property="itemList">
    ${item.name}&nbsp;
      <html:select property="itemRating(${item.id})">
        <html:optionsCollection name="ratesForm" property="rates" label="description" value="value" />
      </html:select>
    <br/>
</logic:iterate>

フォームが送信されると、itemRatingsマップには各アイテムの ID を表す文字列キーが含まれます。キーと値の両方がStrings になり、手動で数値に変換する必要があります。

于 2011-11-26T17:45:42.780 に答える