在JSP中迭代Enum常量
时间:2020-03-06 14:48:17 来源:igfitidea点击:
我有一个这样的枚举
package com.example; public enum CoverageEnum { COUNTRY, REGIONAL, COUNTY }
我想在JSP中遍历这些常量,而不使用scriptlet代码。我知道我可以用如下的scriptlet代码来做到这一点:
<c:forEach var="type" items="<%= com.example.CoverageEnum.values() %>"> ${type} </c:forEach>
但是,如果没有scriptlet,我可以实现相同的目的吗?
干杯,
大学教师
解决方案
如果使用标签库,则可以将代码封装在EL函数中。因此,开始标签将变为:
<c:forEach var="type" items="${myprefix:getValues()}">
编辑:为了回应有关将适用于多个Enum类型的实现的讨论,它只是对此进行了概述:
public static <T extends Enum<T>> Enum<T>[] getValues(Class<T> klass) { try { Method m = klass.getMethod("values", null); Object obj = m.invoke(null, null); return (Enum<T>[])obj; } catch(Exception ex) { //shouldn't happen... return null; } }
如果我们使用的是Spring MVC,则可以通过以下语法祝福来实现目标:
<form:form method="post" modelAttribute="cluster" cssClass="form" enctype="multipart/form-data"> <form:label path="clusterType">Cluster Type <form:errors path="clusterType" cssClass="error" /> </form:label> <form:select items="${clusterTypes}" var="type" path="clusterType"/> </form:form>
其中模型属性(即要填充的bean /数据实体)被命名为cluster,并且我们已经在模型中填充了一个名为clusterTypes的值的枚举数组。 <form:error>
部分是非常可选的。
在Spring MVC领域,我们还可以像这样将clusterTypes
自动填充到模型中
@ModelAttribute("clusterTypes") public MyClusterType[] populateClusterTypes() { return MyClusterType.values(); }