2011-07-19 211 views
3

我有我的後端Java代碼follwoing枚舉:與枚舉值JSTL比較

public static enum CountryCodes implements EnumConstant { 
        USA, CAN, AUS;} 

而且在jsp我想通過枚舉值進行迭代,做一個比較:

<c:set var="countryCodes" value="<%=RequestConstants.CountryCodes.values()%>" /> 
<td><select> 
    <c:forEach items="${countryCodes}" var="countryCode"> 
     <c:choose> 
     <c:when test="${CURRENT_INSTITUTION.countryCode == countryCode}"> 
      <option value="${countryCode}" selected="selected">${countryCode}</option> 
     </c:when> 
     <c:otherwise> 
      <option value="${countryCode}">${countryCode}</option> 
     </c:otherwise> 
     </c:choose> 
    </c:forEach> 
</select></td> 

但是,問題在於,CURRENT_INSTITUTION.countryCode是從數據庫中讀取的,可能不是枚舉值之一。

如果CURRENT_INSTITUTION.countryCode是其他值比枚舉值,(比方說CHN),則比較引發以下例外:

java.lang.IllegalArgumentException異常:無枚舉常數CountryCodes.CHN定義。

我必須應對這種情況,因爲數據庫存儲的舊數據未經過健全性檢查並且可能包含無效值。

那麼有沒有一種方法可以在CURRENT_INSTITUTION.countryCode不是枚舉值之一時返回false?或者有什麼方法可以確定CURRENT_INSTITUION.countryCode是否是枚舉值之一,以便我可以根據該值採取適當的操作?

+0

什麼是'EnumConstant'? – skaffman

回答

12

在返回名稱的枚舉定義一個getter:

public String getName() { 
    return name(); 
} 

然後你就可以比較字符串。

如果您的EL版本支持的方法調用,您可以跳過getter和使用countryCode.name()

+0

謝謝。這工作! – yangsuli