我的后端Java代码中包含以下枚举:
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
如果CURRENT_INSTITUTION.countryCodeis是枚举值以外的值(例如CHN),则比较将引发以下异常:
CHN
java.lang.IllegalArgumentException:未定义枚举const CountryCodes.CHN。
我必须应付这种情况,因为数据库存储的是旧数据,该数据未经健全性检查,并且可能包含无效值。
那么有没有一种方法可以在CURRENT_INSTITUTION.countryCode不属于枚举值之一的情况下只返回false ?还是有办法确定是否CURRENT_INSTITUION.countryCode为枚举值之一,以便我可以据此采取适当的措施?
CURRENT_INSTITUION.countryCode
在枚举中定义一个返回名称的getter:
public String getName() { return name(); }
然后,您可以比较字符串。
如果您的EL版本支持方法调用,则可以跳过getter并使用 countryCode.name()
countryCode.name()