一尘不染

使用JSTL在“选择”标记中填充所选项目?

jsp

我在JSP中使用以下代码将生日月份作为值存储在数据库中。

<select name="birthday_month" id="birthday_month">
  <option value="-1">Month</option>
  <option value="1">Jan</option>
  <option value="2">Feb</option>
  ...
</select>

JSP中的输出代码,以使用我正在使用的JSTL显示先前选择的项目(不正确)

<select name="birthday_month" id="birthday_month">
  <c:forEach var="value" items="${birthdaymonth}">
    <option value="${birthdaymonth}">${birthdaymonth}</option>
    <option value="1">Jan</option>
    <option value="2">Feb</option>
    ...
  </c:forEach>
</select>

What I am getting from this code is value like 1 or 2 in select tag

其他信息:

  1. 我将生日月份的值存储为1,2,3 ..的Jan,Feb,Mar …在数据库中
  2. 我在使用Servlet的请求范围中带来了生日月份的值
    request.setAttribute("birthdaymonth", user.getBirthdayMonth());

我在期待什么

  1. 当我稍后显示JSP时,它应该将先前存储的生日月份显示为Jan,Feb,Mar,而不是1,2,3,并且还显示其他Option值,包括选中的项目以突出显示。

阅读 167

收藏
2020-06-08

共1个答案

一尘不染

要动态地迭代几个月的集合,您希望将月份存储在Map<Integer, String>其中键是月份数字而值是月份名称的位置。要使HTML
<option>元素默认处于选中状态,您需要设置selected属性。

因此,假设您在范围内有a Map<Integer, String> months和a Integer selectedMonth,则应执行以下操作:

<select name="birthday_month">
    <c:forEach items="${months}" var="month">
        <option value="${month.key}" ${month.key == selectedMonth ? 'selected' : ''}>${month.value}</option>
    </c:forEach>
</select>

当等于当前迭代的月份数时,条件运算符?:将打印。selected``selectedMonth

2020-06-08