2011-05-22 96 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

相關問題