比较 JSP 中的枚举值

Compare enum values in JSP

我创建了一个 enum 看起来像:

public enum BtsMode {
    PROJECT_BTS("project_bts"), SERVICE_BTS("service_bts");

    private String mode;

    private BtsMode(String mode) {
        this.mode = mode;
    }

    public String getMode() {
        return mode;
    }

    public static BtsMode getBtsMode(Integer projectId) {
        return projectId == 0 ? BtsMode.SERVICE_BTS : BtsMode.PROJECT_BTS;
    }
};

此枚举是 class 的一部分,其中包含其他应用程序级常量。 基于 projectId 值,我在我的 Spring/java 应用程序中进行其他操作。在UI这边,我希望使用相同的enum来比较BtsMode类型并进行操作。我在网上搜索了一下,发现我可以遍历 enum 并进行比较,但是我必须检查具体的 BtsMode 类型。

使用 getBtsMode() 方法,我得到了适当的 BtsMode 并将其设置为 Spring ModelMap 属性。

BtsMode btsMode = BtsMode.getBtsMode(projectId);
modelMap.addAttribute("curBtsMode", btsMode);

在JSP中,我想根据BtsMode显示隐藏内容。像这样,

<c:choose>
    <c:when test="${curBtsMode eq BtsMode.PROJECT_BTS}">
        <%-- Display elements specific to PROJECT_BTS --%>          
    </c:when>
    <c:when test="${curBtsMode eq BtsMode.SERVICE_BTS}">
        <%-- Display elements specific to SERVICE_BTS --%>          
    </c:when>
</c:choose>

我不想使用 scriptlet,因为我们不在我们的应用程序中使用它们。还有其他方法可以实现吗?

临时解决方案

目前,由于BtsMode枚举只有两个值,我可以通过在modelMap中设置来使用它:

modelMap.addAttribute("projBtsMode", BtsMode.PROJECT_BTS);
modelMap.addAttribute("serviceBtsMode", BtsMode.SERVICE_BTS);

并在 JSP 中访问:

<c:if test="${curBtsMode eq projBtsMode}">

这很好用,但如果有更好的解决方案,我将不胜感激。

尝试使用简单的字符串:

<c:when test="${curBtsMode  == 'PROJECT_BTS'}">
    <%-- Display elements specific to PROJECT_BTS --%>          
</c:when>
<c:when test="${curBtsMode == 'SERVICE_BTS'}">
    <%-- Display elements specific to SERVICE_BTS --%>          
</c:when>

只要您至少使用 3.0 版的 EL,您就可以按如下方式将常量导入您的页面:

<%@ page import="org.example.Status" %>
<c:when test="${dp.status eq Status.VALID}">

一些IDE不明白这个,所以使用替代方法。

辅助方法

  public enum Status { 
  VALID("valid")

  private final String val;

  Status(String val) {
    this.val = val;
  }

  public String getStatus() {
    return val;
  }

  public boolean isValid() {
    return this == VALID;
  }

}

JSP:

<c:when test="${dp.status.valid}">