14

私はこのような列挙型を持っています

package com.example;

public enum CoverageEnum {

    COUNTRY,
    REGIONAL,
    COUNTY
}

スクリプトレット コードを使用せずに、JSP でこれらの定数を反復処理したいと考えています。次のようなスクリプトレット コードで実行できることはわかっています。

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

しかし、スクリプトレットなしで同じことを達成できますか?

乾杯、ドン

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()}">

編集:複数の列挙型で機能する実装についての議論に応えて、これをスケッチしました:

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 に答える