在JSP EL枚举值中始终为空

尝试使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目录中的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等的Integer值,而使用枚举代替进行比较。

回答:

这是因为当前版本的EL不支持访问枚举或调用枚举常量。仅EL 3.0提供此支持。

目前尚不清楚您的意图是什么,但是很高兴您可以将枚举属性作为StringEL中的一个进行比较。它们即被解析为String

假设您有一个如下所示的bean:

public class Booking {

public enum Status { NEW, PROGRESS, SUCCESS, FAILED }

private Status status;

public Status getStatus() {

return status;

}

}

然后,您可以Status.FAILED按以下方式测试条件:

<c:if test="${booking.status == 'FAILED'}">

Booking status is FAILED.

</c:if>

以上是 在JSP EL枚举值中始终为空 的全部内容, 来源链接: utcz.com/qa/400649.html

回到顶部