比较 JSP 中的枚举值
Compare enum values in JSP
我创建了一个 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;
}
};
此枚举是 class 的一部分,其中包含其他应用程序级常量。
基于 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}">
这很好用,但如果有更好的解决方案,我将不胜感激。
尝试使用简单的字符串:
<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>
只要您至少使用 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}">
我创建了一个 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;
}
};
此枚举是 class 的一部分,其中包含其他应用程序级常量。
基于 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}">
这很好用,但如果有更好的解决方案,我将不胜感激。
尝试使用简单的字符串:
<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>
只要您至少使用 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}">