При попытке заставить работать условие EL я обнаружил, что значения перечисления полностью игнорируются. Мне кажется, что это противоречит спецификации.
<c:out value='${com.foobar.data.BookingStatus.FAILED}' />
<c:out value='${BookingStatus.FAILED}' />
<c:out value='${com.foobar.data.BookingStatus.failed}' />
<c:out value='${BookingStatus.failed}' />
<c:if test="${empty BookingStatus.FAILED }">empty</c:if>
К моему удивлению, все они оцениваются как пустые. Почему класс Enum не распознается? Это происходит в текущем стабильном экземпляре Tomcat.
Может ли это быть проблемой пути к классам? Enum успешно используется в коде контроллера, но больше нигде в JSP. Он поставляется в банке в каталоге lib развертывания.
ОБНОВЛЕНИЕ:
Мое намерение состоит в том, чтобы сравнить предоставленное целое число со свойством Enum следующим образом:
<c:when test='${bookingInformation.bookingStatus eq BookingStatus.FAILED.code}'>
FOOBARFAIL
</c:when>
К сожалению, проверяемое значение не может быть изменено и останется целым числом. Enum выглядит следующим образом (упрощенно):
public enum BookingStatus {
COMPLETED(0), FAILED(1);
private final int code;
private BookingStatus(int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
Я хочу избежать жесткого кодирования целочисленного значения FAIL и т. д. и вместо этого использовать перечисление для сравнения.