我创建了一个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;
    }
};


该枚举是包含其他应用程序级常量的类的一部分。
基于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>


我不想使用脚本,因为我们不在应用程序中使用它们。还有其他方法可以做到这一点吗?

临时解决方案

当前,由于BtsMode枚举只有两个值,因此可以通过在modelMap中进行设置来使用它:

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


并在JSP中访问:

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


这很好用,但是如果有更好的解决方案,我将非常感谢。

最佳答案

只要您至少使用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}">

08-26 14:40