2011-11-26 64 views
2

我有一個itemList,並且對於每個item,都會顯示一個評級下拉列表。在用戶對itemList中的每個item進行評分後,我想將這些速率存儲在一個數組中。我該怎麼做? selectedRate下面是Integer類型,代碼未能解決問題。<html:select> inside <logic:iterate>

<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

每個select選項都需要與特定項目相關聯。

最簡單的方法是使用Item的集合,並給每個Item一個rating屬性。本例中我使用了Integer

<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>。除了對地圖本身正常的吸氣劑,提供索引的方法:

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的字符串鍵。密鑰和值都將是String s,您需要手動將任何轉換爲​​數字值。

+0

非常感謝您的提示。我試了一下,它的功能就像一個魅力! –

相關問題