【问题标题】:Selected item populating in Select tag using JSTL?使用 JSTL 填充 Select 标记中的选定项目?
【发布时间】:2011-05-22 19:14:17
【问题描述】:

我在 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. 我使用
    request.setAttribute("birthdaymonth", user.getBirthdayMonth()); 在 Servlet 的请求范围内带来生日月份的值

我所期待的

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

【问题讨论】:

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


    【解决方案1】:

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

    因此,假设您在作用域中有 Map&lt;Integer, String&gt; 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>
    

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

    【讨论】:

    • 这是有效的。但是,当我单击选项值的下拉箭头时,选项值意味着月份不是按顺序排列的,即它们是按这样的Mar,Feb,Oct,Jan,Jul,Jun,May,Apr,Sep,Aug,Nov,Dec 排列的。为什么会这样?有什么原因吗?
    • 使用LinkedHashMap 而不是HashMap。然后元素将通过插入顺序而不是哈希码来维护。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    相关资源
    最近更新 更多