这里还有两种可能性:
JSP EL 3.0 常量
只要您至少使用 3.0 版的 EL,您就可以将常量导入您的页面,如下所示:
<%@ page import="org.example.Status" %>
<c:when test="${dp.status eq Status.VALID}">
但是,一些 IDE 还不理解这一点(例如IntelliJ),因此如果您打错字,直到运行时才会收到任何警告。
一旦获得适当的 IDE 支持,这将是我的首选方法。
辅助方法
您可以将吸气剂添加到您的枚举中。
public enum Status {
VALID("valid"), OLD("old");
private final String val;
Status(String val) {
this.val = val;
}
public String getStatus() {
return val;
}
public boolean isValid() {
return this == VALID;
}
public boolean isOld() {
return this == OLD;
}
}
然后在您的 JSP 中:
<c:when test="${dp.status.valid}">
这在所有 IDE 中都受支持,如果您还不能使用 EL 3.0,也可以使用。这就是我目前所做的,因为它将所有逻辑都包含在我的枚举中。
如果存储枚举的变量可能为空,也要小心。如果您的代码不能保证它不为空,您需要先检查它:
<c:when test="${not empty db.status and dp.status.valid}">
我认为这种方法优于在 JSP 中设置中间值的方法,因为您必须在需要使用枚举的每个页面上执行此操作。但是,使用此解决方案,您只需声明一次 getter。