2008-09-26 159 views
12

枚舉常量我有一個枚舉這樣循環訪問JSP中

package com.example; 

public enum CoverageEnum { 

    COUNTRY, 
    REGIONAL, 
    COUNTY 
} 

我想遍歷在JSP這些常量,而無需使用scriptlet代碼。我知道我可以用這樣的scriptlet代碼做到這一點:

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

但我可以做到同樣的事情沒有小腳本?

乾杯, 唐

回答

5

如果您使用的標籤庫,你可以EL函數內封裝代碼。因此,開放標籤將成爲:

<c:forEach var="type" items="${myprefix:getValues()}"> 

編輯:在回答關於將多個枚舉類型的工作實現的討論只是勾勒出這樣的:如果你使用Spring MVC

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; 
    } 
} 
+0

如果我這樣做,這樣我就需要定義EL函數每個枚舉,這將是一個真正的痛苦。定義一個適用於所有枚舉的單個函數(可能通過反射)將是更可取的。但是,在某些JSP taglib中肯定存在這樣的函數? – 2008-09-26 20:18:51

7

,你可以用下面的語法祝福達成你的目標:

<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> 

您的模型屬性(即豆/數據實體填充)被命名爲集羣,並且您已經填充日e模型,其中包含名爲clusterTypes的枚舉數組。 <form:error>部分是非常可選的。

在Spring MVC的土地,也可以自動填充clusterTypes到模型中這樣

@ModelAttribute("clusterTypes") 
public MyClusterType[] populateClusterTypes() { 
    return MyClusterType.values(); 
}