Spring JSP选择数字范围列表

时间:2012-04-24 22:18:52

标签: spring jsp select

我正在创建一个时间输入系统,用户可以通过两个单独的下拉选择框选择小时和分钟。因此,小时框中的数字为 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对象传递当前设置的参数。

3 个答案:

答案 0 :(得分:3)

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

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

如果表单的命令对象在“小时”值中设置了所选值,并且模型在“小时”值中包含1-12,那么它应该呈现选择并注意标记相应的选项选择。然后你会做几分钟。

如果您不想使用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:如果是部分,可能使用c:选择,但你得到了要点。您可以在selectedHour中选择所选值,并在模型中以小时为单位选择。

答案 1 :(得分: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"%>

答案 2 :(得分: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>