1

这是我的代码:

<form>
    <table>
        <tr>
            <td>Month</td>
            <td>
                <select name="">
                    <option value="">January</option>
                    <option value="">February</option>
                    <option value="">March</option>
                    <option value="">April</option>
                    <option value="">May</option>
                    <option value="">June</option>
                    <option value="">July</option>
                    <option value="">August</option>
                    <option value="">September</option>
                    <option value="">October</option>
                    <option value="">November</option>
                    <option value="">December</option>
                </select>
            </td>
        </tr>
        <tr>
            <td>Year</td>
            <td><input type="text" name="year"></td>
        </tr>
        <tr>
            <td><input type="submit" value="Submit"></td>
        </tr>
    </table>
</form>

我想将月份值放入选项值中。假设 2013-07-16 是 SimpleDateFormat 中日期格式为 yyyy-mm-dd 的日期。如何使用这种格式将 7 月或“07”的值放入我的选项值中。

4

3 回答 3

3
<fmt:format var="month" value="${theDate}" pattern="MM"/>
<select name="">
    <option value="01" ${month == "01" ? "selected='selected'" : ""}>January</option>
    <option value="02" ${month == "02" ? "selected='selected'" : ""}>February</option>
    ...
</select>

但是,在这段代码中有很多重复,所以你最好List<SelectableMonth>在你的控制器中准备一个,然后遍历这个列表:

 <select name="">
    <c:forEach var="month" items="${selectableMonths}">
        <option value="${month.number}" ${month.selected ? "selected='selected'" : ""}>${month.label}</option>
    </c:forEach>        
</select>
于 2013-07-16T17:34:12.857 回答
1

多年来我没有写过任何 JSP,但我认为这应该为您指明正确的方向:

<%@ taglib uri="http://java.sun.com/jstl/core"    prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c-rt" %>

<%!
  String[] months = { "January","February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
%>

<form>
    <table>
        <tr>
            <td>Month</td>
            <td>
                <select name="">
                  <c-rt:forEach var="month" items="<%= months %>">
                      <option value="${i}">${months[i]}</option>
                  </c-rt:forEach>
                </select>
            </td>
        </tr>
        <tr>
            <td>Year</td>
            <td><input type="text" name="year"></td>
        </tr>
        <tr>
            <td><input type="submit" value="Submit"></td>
        </tr>
    </table>
</form>
于 2013-07-16T17:31:59.427 回答
0

假设 2013-07-16 是 SimpleDateFormat 中日期格式为 yyyy-mm-dd 的日期。如何使用这种格式将 7 月或“07”的值放入我的选项值中。

你的问题有点不清楚,但听起来你在问你是否有一个由 a 建模的日期值String,并且 aSimpleDateFormat与该值的模式匹配,你如何修改格式以以新的方式输出它?那是你要找的吗?

如果这是您要问的,则需要两个更多的实例SimpleDateFormat来模拟您要使用的新格式——一个用于模拟月份名称,另一个用于其数值。然后,您可以使用该parse(String source)方法将您的String转换为Date并从那里重新格式化。如果你想采用这种方法,下面的方法应该可以工作。

ParseException不过,如果采用这种方法,请小心抛出。如果可能的话,你最好从 a 开始。Date

<%
    String today = "2013-07-16";
    SimpleDateFormat yearMonthDay = new SimpleDateFormat("yyyy-MM-dd");
    Date todaysDate = yearMonthDay.parse(today);

    String monthAsNumber = new SimpleDateFormat("MM").format(todaysDate);
    String monthAsFullName = new SimpleDateFormat("MMMMM").format(todaysDate);
%>

<select>
    <option value="<%= monthAsNumber %>"><%= monthAsFullName %></option>
</select> 

此外,最好的做法是从 JSP 中完全删除这种类型的 Java 代码,以实现可测试性、重用等 — 您应该考虑使用 JSTL 函数,这将允许您将数据解析移到一个单独的类中然后使用 bean 来呈现每个日期需要显示的两个值。

于 2013-07-16T23:31:33.813 回答