gpt4 book ai didi

java - 比较 JSP 中的枚举值

转载 作者:行者123 更新时间:2023-11-30 06:16:06 24 4
gpt4 key购买 nike

我创建了一个枚举,如下所示:

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>

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

临时解决方案

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

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

并在JSP中访问:

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

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

最佳答案

只要您使用的 EL 版本至少为 3.0,那么您就可以将常量导入到您的页面中,如下所示:

<%@ 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}">

关于java - 比较 JSP 中的枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49169010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com