Каждый параметр select
должен быть связан с конкретным элементом.
Самый простой способ - использовать коллекцию Item
с и присвоить каждому Item
a 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);
}
Если у предметов нет ассоциированного рейтинга, вам нужно будет использовать карту ключей идентификаторов предметов и значений рейтинга. Это более запутанный; Я рекомендую коллекцию.
Во-первых, карта будет 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
будет содержать строковые ключи, представляющие идентификатор каждого элемента. Ключ и значение будут String
с, и вам нужно будет выполнить любые преобразования в числовые значения вручную.