使用JSTL在Select标签中填充的选定项目?

时间:2011-05-22 19:14:18

标签: java html jsp drop-down-menu jstl

我使用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月的数据库
  2. 中存储了生日月份,如1,2,3 ..
  3. 我使用
    在Servlet中将生日月的值带入请求范围  request.setAttribute("birthdaymonth", user.getBirthdayMonth());
  4. 我的期待

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

1 个答案:

答案 0 :(得分:6)

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

因此,假设您在范围内有Map<Integer, String> monthsInteger 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