比较JSP中的枚举值

时间:2018-03-08 08:52:21

标签: java spring enums jstl

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

此枚举是包含其他应用程序级常量的类的一部分。 根据{{​​1}}值,我在projectId应用程序中执行其他操作。在UI方面,我希望使用相同的Spring/java来比较enum类型并执行操作。我搜索了网络,发现我可以迭代BtsMode并进行比较,但我必须检查具体的enum类型。

使用BtsMode方法,我得到相应的getBtsMode()并将其设置为Spring BtsMode属性。

ModelMap

在JSP中,我想显示隐藏内容取决于BtsMode btsMode = BtsMode.getBtsMode(projectId); modelMap.addAttribute("curBtsMode", btsMode); 。像这样的东西,

BtsMode

我不想使用scriptlet,因为我们不会在我们的应用程序中使用它们。还有其他方法可以达到这个目的吗?

临时解决方案

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

<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>

在JSP中访问:

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

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

2 个答案:

答案 0 :(得分:1)

Try with a simple String:

<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>

答案 1 :(得分:0)

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