我想在JSP中创建一个选择标签,其中选项是枚举(例如所有美国州)。是否有JSTL或标准标签可以完成此操作,而无需手动迭代列表?
在JSTL中,只需将 jstl-1.2.jar 放入 /WEB-INF/lib
文件夹中即可使用 c:forEach
标签。你只需要将(老式)的 Enumeration
转换成一个现代的 List
或者如果它是硬编码的Java,也可以是 Enum
。如果需要,你可以通过Collections#list()
获取它,如果 Enumeration
是从不可更改的第三方API获取的。
这里是演示如何使用 <c:forEach>
:
<select name="country">
<c:forEach items="${countries}" var="country">
<option value="${country.code}" ${param.country eq country.code ? 'selected' : ''}>${country.name}</option>
</c:forEach>
</select>
${countries}
应该引用放置在page
、request
、session
或 application
作用域之一中的 List<Country>
或 Country[]
。其中,application
作用域是最直接的选择,因为国家列表应该是一个全局常量。可以使用ServletContextListener
在应用程序启动时加载它并将其放入应用程序作用域。在这个例子中,Country
只是一个至少有两个属性的 Javabean(模型)类。
JSTL中没有这个功能,不过许多框架提供了这些额外的标签:
Struts2 - <s:select>
Spring MVC - <form:select>
<h:selectOneMenu>
h:selectOneMenu
。 - BalusCc:forEach
”,但它也可能意味着其他任何事情。 - Bozho