首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><logic:iterate>内部的<html:select>

<logic:iterate>内部的<html:select>
EN

Stack Overflow用户
提问于 2011-11-26 23:11:17
回答 1查看 11.5K关注 0票数 2

我有一个itemList,对于每个item,都会显示一个评级下拉列表。在用户对itemList中的每个item进行评分后,我希望将这些评分存储在一个数组中。怎么做呢?下面的selectedRateInteger类型的,代码解决不了问题。

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-27 01:45:43

每个select选项都需要与特定的项目相关联。

最简单的方法是使用一个Item集合,并为每个Item提供一个rating属性。我在这个例子中使用了一个Integer

<html:select>使用数组表示法,并直接设置每个项目的评级。(我使用了一个来自表单本身的费率列表和一个更简单的布局;忽略这些差异。)

代码语言:javascript
复制
<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>

正如我们所预期的那样,该操作访问项目评级:

代码语言:javascript
复制
RatesForm ratesForm = (RatesForm) form;
List<Item> items = ratesForm.getItemList();
for (Item item : items) {
    System.out.println(item.rating);
}

如果项目没有关联的评级,您将需要使用项目id键和评级值的映射。这更加复杂;我推荐一个集合。

首先,由于索引属性的工作方式,映射将是Map<String, Object>的。除了映射本身的普通getter之外,还需要提供索引方法:

代码语言:javascript
复制
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与此类似,但是使用"()"而不是"[]"来使用索引表单方法。

代码语言:javascript
复制
<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,您需要手动将其转换为数字值。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8279343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档