使用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>