我创建了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);
这很好用,但如果有更好的解决方案,我会非常感激。
答案 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}">