使用EL和JSTL访问Enum值
时间:2020-03-06 14:37:29 来源:igfitidea点击:
我有一个名为Status的枚举,其定义如下:
public enum Status {
VALID("valid"), OLD("old");
private final String val;
Status(String val) {
this.val = val;
}
public String getStatus() {
return val;
}
}
我想从JSTL标记访问VALID的值。特别是<c:when>标签的test属性。例如。
<c:when test="${dp.status eq Status.VALID">
我不确定这是否可行。
解决方案
因此,要使我的问题得到完全解决,我需要执行以下操作:
<% pageContext.setAttribute("old", Status.OLD); %>
然后,我能够做到:
<c:when test="${someModel.status == old}"/>...</c:when>
如预期般运作。
与字符串的简单比较:
<c:when test="${someModel.status == 'OLD'}">
为此,我执行以下操作:
<c:set var="abc">
<%=Status.OLD.getStatus()%>
</c:set>
<c:if test="${someVariable == abc}">
....
</c:if>
看起来很丑,但是行得通!
我通常认为将Java代码混入jsps / tag文件是一种不好的做法。使用'eq'应该可以解决问题:
<c:if test="${dp.Status eq 'OLD'}">
...
</c:if>
向枚举添加方法,例如:
public String getString() {
return this.name();
}
例如
public enum MyEnum {
VALUE_1,
VALUE_2;
public String getString() {
return this.name();
}
}
然后,我们可以使用:
<c:if test="${myObject.myEnumProperty.string eq 'VALUE_2'}">...</c:if>

