每個select
選項都需要與特定項目相關聯。
最簡單的方法是使用Item
的集合,並給每個Item
一個rating
屬性。本例中我使用了Integer
。
<html:select>
使用數組符號,並直接設置每個項目的評分。 (我使用的是從形式本身,和一個簡單的佈局率列表;忽略這些差異。)
<logic:iterate id="item" name="ratesForm" property="itemList" indexId="i">
${item.name}
<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>
。除了對地圖本身正常的吸氣劑,提供索引的方法:
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}
<html:select property="itemRating(${item.id})">
<html:optionsCollection name="ratesForm" property="rates" label="description" value="value" />
</html:select>
<br/>
</logic:iterate>
當表單提交時,itemRatings
圖將包含表示每個項目ID的字符串鍵。密鑰和值都將是String
s,您需要手動將任何轉換爲數字值。
非常感謝您的提示。我試了一下,它的功能就像一個魅力! –