【问题标题】:Comparing with enum value in JSTL与 JSTL 中的枚举值比较
【发布时间】:2011-07-19 15:36:38
【问题描述】:

我的后端 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 不是枚举值(比如CHN),则比较会引发以下异常:

java.lang.IllegalArgumentException: 未定义枚举 const CountryCodes.CHN。

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

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

【问题讨论】:

    标签: jsp enums jstl el


    【解决方案1】:

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

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

    然后你可以比较字符串。

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

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多