在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提供此支持。
目前尚不清楚您的意图是什么,但是很高兴您可以将枚举属性作为String
EL中的一个进行比较。它们即被解析为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