2011-07-19 159 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