与JSTL中的枚举值进行比较

yan*_*uli 3 enums jsp jstl el

我在我的后端java代码中有以下枚举:

public static enum CountryCodes implements EnumConstant {
                   USA, CAN, AUS;}
Run Code Online (Sandbox Code Playgroud)

在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>
Run Code Online (Sandbox Code Playgroud)

但问题是,CURRENT_INSTITUTION.countryCode从数据库中读取并且可能不是枚举值之一.

如果CURRENT_INSTITUTION.countryCode是枚举值以外的值(比方说CHN),则比较会抛出以下异常:

java.lang.IllegalArgumentException:没有定义枚举const CountryCodes.CHN.

我必须应对这种情况,因为数据库存储旧数据,这些数据未经过完整性检查,可能包含无效值.

那么有没有一种比较方法只是在CURRENT_INSTITUTION.countryCode不是枚举值之一时返回false ?或者有没有办法确定是否CURRENT_INSTITUION.countryCode是枚举值之一,以便我可以基于此采取适当的行动?

Boz*_*zho 13

在枚举中定义一个返回名称的getter:

public String getName() {
    return name();
}
Run Code Online (Sandbox Code Playgroud)

然后你可以比较字符串.

如果您的EL版本支持方法调用,则可以跳过getter并使用 countryCode.name()