我在我的后端 java代码中有以下枚举: public static enum CountryCodes implements EnumConstant { USA, CAN, AUS;} 在jsp中我试图遍历枚举值并进行比较: c:set var="countryCodes" value="%=RequestConstants.CountryCodes
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: no enum const CountryCodes.CHN defined.
我必须应对这种情况,因为数据库存储旧数据,这些数据未经过完整性检查,可能包含无效值.
那么当CURRENT_INSTITUTION.countryCode不是枚举值之一时,有没有一种比较方法只返回false?或者有没有办法确定CURRENT_INSTITUION.countryCode是否是枚举值之一,以便我可以根据它采取适当的行动?
在枚举中定义一个返回名称的getter:public String getName() { return name(); }
然后你可以比较字符串.
如果您的EL版本支持方法调用,则可以跳过getter并使用countryCode.name()