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