Сравнение со значением enum в JSTL - PullRequest
3 голосов
/ 19 июля 2011

В моем бэкэнд-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: noenum const CountryCodes.CHN определены.

Я должен справиться с этой ситуацией, потому что база данных хранит старые данные, которые не проверены и могут содержать недопустимое значение.

Так есть ли способ сравнения просто вернуть false, когда CURRENT_INSTITUTION.countryCode не является одним из значения перечисления?Или есть способ определить, является ли CURRENT_INSTITUION.countryCode одним из значений перечисления или нет, чтобы я мог предпринять соответствующие действия на основе этого?

1 Ответ

13 голосов
/ 19 июля 2011

Определите получатель в перечислении, которое возвращает имя:

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

Тогда вы можете сравнить строки.

Если ваша версия EL поддерживает вызовы методов, вы можете пропустить метод получения и использовать countryCode.name()

...