2011-05-22 108 views
1

我使用JSP中的以下代码将数据库中的生日月存储为值。使用JSTL填充选择标签中的选定项目?

  1. 我:在JSP

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

    输出代码中使用,我使用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,2,3 ..对于Jan,Feb,Mar ...在数据库中

  2. 我使用
    request.setAttribute("birthdaymonth", user.getBirthdayMonth());

我期待

  1. 带来生日月份的数值在请求范围中的Servlet当我告诉后来JSP它应该显示以前存储的生日月份为一月,二月, Mar而不是1,2,3,并且还显示其他选项值,包括选定的项目突出显示。

回答

6

要动态遍历个月的集合,你想存储在Map<Integer, String>月,其中的关键是月号和值是月的名称。要默认选择一个HTML <option>元素,您需要设置selected属性。

因此,假设你有一个Map<Integer, String> months并在范围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> 

条件运算符?:将打印selectedselectedMonth等于当前迭代月数。

+0

这是行得通的。但是,当我点击Option Value的下拉箭头时,Option值意味着月份不是按顺序排列的,也就是说它们的顺序是这样的:'Mar,Feb,Oct,Jan,Jul,Jun,May,Apr,Sep,Aug,Nov ,Dec'。这是为什么发生?任何原因? – 2011-05-23 03:53:19

+1

使用'LinkedHashMap'而不是'HashMap'。然后这些元素将通过插入顺序而不是哈希码进行维护。 – BalusC 2011-05-23 03:54:33

+0

是的,它使用LinkedHashMap。 – 2011-05-23 06:32:12

相关问题