2

我正在创建一个时间输入系统,用户可以通过两个单独的下拉选择框选择小时和分钟。所以小时框有数字1-12,分钟框有00-59

这是 Spring 2.5 Java EE 项目的一部分。

例如,我在我的 JSP 中有这个,用于创建选项值作为选择下拉列表的一部分:

<% for( int i=1; i<=12; i++) { %>
<option value="<%=i %>" <%= Integer.parseInt(time1fromHr)==i?selected:"" %> />
<% } %>

for 循环生成所有小时并将当前选定的小时标记为默认值。嗯,对我来说它看起来很丑,主要是因为这里涉及到相当多的 Java 代码,我想知道是否有更优雅的解决方案来使用 JSP 标记或 Spring 库来解决这个问题。我通过 Spring 中的 ModelAndView 对象传入当前设置的参数。

4

3 回答 3

3

在您的模型中,您可以将一个整数列表传递几个小时,另一个传递几分钟。然后你可以使用 form:select 标签。

<form:select path="hour">
  <form:options items="${hours} />
</form:select>

If your command object for the form has the selected value set in the "hour" value, and the model contains 1-12 in the "hours" value, then it should render the select and take care of marking the appropriate option selected. 然后你做同样的几分钟。

如果您不想采用 spring form taglib 方向,您可以再次将小时放在模型中并使用 JSTL。就像是:

<c:forEach var="hour" items="${hours}">
  <c:if test="${hour} == ${selectedHour}">
    <option value="${hour}" selected="selected">${hour}</option>
  </c:if>
  <c:if test="${hour} != ${selectedHour}">
    <option value="${hour}" >${hour}</option>
  </c:if>
</c:forEach>

我知道有一个更好的方法来做 c:if 部分,也许使用 ac:choose,但你明白了要点。您在 selectedHour 中有您选择的值,在模型中有您选择的小时数。

于 2012-04-24T22:38:42.937 回答
1

是的,Spring MVC 的这一部分:

  @RequestMapping(value="/index.html",method=RequestMethod.GET)
    public String form(ModelMap map) {
        Map<String,String> country = new LinkedHashMap<String,String>();
    country.put("US", "United Stated");
    country.put("CHINA", "China");
    country.put("SG", "Singapore");
    country.put("MY", "Malaysia");
    map.addAttribute("countryList", country);
        return "index";
}

然后使用:

<form:select path="country" items="${countryList}" />

不要忘记将 Spring 类型库添加到您的页面:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
于 2012-04-24T22:34:31.343 回答
0

使用 JSTL 进行比较

<c:forEach var="hour" items="${hours}">
  <c:if test="${hour == selectedHour}">
    <option value="${hour}" selected="selected">${hour}</option>
  </c:if>
  <c:if test="${hour != selectedHour}">
    <option value="${hour}" >${hour}</option>
  </c:if>
</c:forEach>

OR 

<c:forEach var="hour" items="${hours}">
  <c:if test="${hour eq selectedHour}">
    <option value="${hour}" selected="selected">${hour}</option>
  </c:if>
  <c:if test="${hour ne selectedHour}">
    <option value="${hour}" >${hour}</option>
  </c:if>
</c:forEach>
于 2013-07-18T08:00:52.697 回答