14

我有一个这样的枚举

package com.example;

public enum CoverageEnum {

    COUNTRY,
    REGIONAL,
    COUNTY
}

我想在不使用 scriptlet 代码的情况下在 JSP 中迭代这些常量。我知道我可以用这样的脚本代码来做到这一点:

<c:forEach var="type" items="<%= com.example.CoverageEnum.values() %>">
    ${type}
</c:forEach>

但是我可以在没有 scriptlet 的情况下实现同样的目标吗?

干杯,唐

4

2 回答 2

7

如果您使用的是 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();
}
于 2010-10-04T17:09:28.467 回答
5

如果您使用标签库,您可以将代码封装在 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;
    }
}
于 2008-09-26T20:10:03.627 回答