I want to make a se开发者_开发问答lect tag in a JSP, where the options are an Enumeration (for example, all US States). Is their a tag in JSTL or a standard tag that can do this, without manually iterating through the list?
Certainly, in JSTL (just drop jstl-1.2.jar in /WEB-INF/lib
) there's the c:forEach
tag. You'll only have to convert the (old fashioned) Enumeration
to a modern List
or perhaps Enum
if it's hardcoded in Java. You can if necessary grab Collections#list()
for this if the Enumeration
is to be obtained from an unchangeable 3rd party API.
Here's a demo how the <c:forEach>
can then be used:
<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>
The ${countries}
should refer a List<Country>
or Country[]
which has been put in any of the page
, request
, session
or application
scopes — of which the application
scope is the most straightforward choice, as a list of countries is supposed to be an application wide constant. You could use a ServletContextListener
to load it once and put in application scope on application's startup. The Country
is in this example just a Javabean (model) class with at least two properties.
See also:
- Populating cascading dropdown lists in JSP/Servlet
- Set selected option on existing select tag with jstl
- Using enum in JSTL - Can I access the values of an enum class from a JSP using EL?
There isn't in JSTL. However many frameworks provide such additional tags:
Struts2 -
<s:select>
Spring MVC -
<form:select>
- JSF -
<h:selectOneMenu>
精彩评论