作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个枚举
,如下所示:
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/
我是一名优秀的程序员,十分优秀!