Java 使用JSTL在Select标记中填充选定项?

Java 使用JSTL在Select标记中填充选定项?,java,html,jsp,drop-down-menu,jstl,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

我在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>
我从这段代码中得到的是select标记中的值,如1或2

其他资料:

我将生日月份存储为1,2,3。。一月、二月、三月。。。在数据库中 我使用 request.setAttributeBithDayMonth,user.getBirthdayMonth; 我所期待的

当我稍后显示JSP时,它应该将以前存储的生日月份显示为一月、二月、三月,而不是1、2、3,并且还显示其他选项值,包括高亮显示的所选项目。
要在月的集合上动态迭代,您需要将月存储在一个映射中,其中键是月号,值是月名。要使HTML元素在默认情况下处于选中状态,需要设置selected属性

因此,假设您在范围中有一个映射月份和一个整数selectedMonth,那么应该执行以下操作:

${month.value}
条件运算符?:当selectedMonth等于当前迭代的月数时,将打印所选内容。

若要动态迭代月数集合,请将月数存储在映射中,其中键为月数,值为月名。要使HTML元素在默认情况下处于选中状态,需要设置selected属性

因此,假设您在范围中有一个映射月份和一个整数selectedMonth,那么应该执行以下操作:

${month.value}
条件运算符?:当selectedMonth等于当前迭代的月数时,将打印所选内容。

这是有效的。但是,当我单击选项值的下拉箭头时,选项值表示月份不按顺序排列,即它们按顺序排列,如3月、2月、10月、1月、7月、6月、5月、4月、9月、8月、11月、12月。为什么会发生这种情况?任何原因?使用LinkedHashMap而不是HashMap。然后元素将按插入顺序而不是哈希代码进行维护。这是可行的。但是,当我单击选项值的下拉箭头时,选项值表示月份不按顺序排列,即它们按顺序排列,如3月、2月、10月、1月、7月、6月、5月、4月、9月、8月、11月、12月。为什么会发生这种情况?任何原因?使用LinkedHashMap而不是HashMap。然后,元素将按照插入顺序而不是哈希代码进行维护。