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