如何在JSP中使用JSTL或标准操作生成select标签

10

我想在JSP中创建一个选择标签,其中选项是枚举(例如所有美国州)。是否有JSTL或标准标签可以完成此操作,而无需手动迭代列表?


1
在这里,你应该更清楚地解释一下“手动”这个术语。你还应该澄清一下c:forEach有什么问题。它可以动态地遍历列表,而不需要事先知道项目的数量。 - BalusC
2个回答

16

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} 应该引用放置在pagerequestsessionapplication 作用域之一中的 List<Country>Country[]。其中,application 作用域是最直接的选择,因为国家列表应该是一个全局常量。可以使用ServletContextListener在应用程序启动时加载它并将其放入应用程序作用域。在这个例子中,Country 只是一个至少有两个属性的 Javabean(模型)类。

另请参阅:


6

JSTL中没有这个功能,不过许多框架提供了这些额外的标签:


不?他只是不想手动遍历列表而已。或者我们对“手动”有另一种解释。无论如何,为了完成列表,在JSF中有一个 h:selectOneMenu - BalusC
我会使用Struts2。我忘了我可以使用struts标签而不使用Struts框架。 - Eric Wilson
@BalusC - 我理解“手动”意味着“通过c:forEach”,但它也可能意味着其他任何事情。 - Bozho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接