【发布时间】:2023-03-23 10:50:01
【问题描述】:
当试图让 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>
令我惊讶的是,这些都评估为 empty。为什么无法识别 Enum 类? 这发生在当前稳定的 Tomcat 实例中。
这可能是类路径问题吗? Enum 在控制器代码中成功使用,但在 JSP 中没有其他地方。它在部署的 lib 目录中的 jar 中提供。
更新:
我的目的是将提供的 Integer 与 Enum 的属性进行比较,如下所示:
<c:when test='${bookingInformation.bookingStatus eq BookingStatus.FAILED.code}'>
FOOBARFAIL
</c:when>
不幸的是,被检查的值无法更改,并且将保持为整数。枚举如下(简化):
public enum BookingStatus {
COMPLETED(0), FAILED(1);
private final int code;
private BookingStatus(int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
我想避免对 FAIL 等的整数值进行硬编码,而是使用枚举来进行比较。
【问题讨论】:
-
不,不是。我的条件没有问题,但是 Enum 对象本身不可访问,它为空/空。就像 Tomcat 根本看不到 Enum 类一样。