小编典典

枚举被解释为字符串

jsp

当用户登录时,我正在设置一个sessionScope对象,并且那个bean对象由几个其他bean组成。这些bean的属性之一是枚举,但是我发现EL无法获取enum类的属性,而只能获取Java
bean对象的属性。因此,我决定为该枚举创建一个bean类,并将该枚举嵌套在该bean类中。我为替换枚举而制作的java
bean,以便可以通过EL获得其值,如下所示:

public class RankBean implements Serializable {

    private static final long serialVersionUID = -1;

    private String rankName;

    public RankBean(String rankName) {
        this.rankName= rankName;
    }

    public RankBean(Rank rank) {
        this.rankName = rank.getRankName();
    }

    public String getRankName() {
            return rankName;
        }

    public void setRankName(String rankName) {
        this.rankName = rankName;
    }

    public static enum Rank {
        RANK_1("some rank name"),
        RANK_2("some rank name"),
        RANK_3("some rank name"),
        RANK_4("some rank name"),
        RANK_5("some rank name"),
        RANK_6("some rank name"),
        RANK_7("some rank name"),
        RANK_8("some rank name");

        private String rankName;

        private Rank(String rankName) {
            this.rankName = rankName;
        }

        public String getRankName() {
            return rankName;
        }

        public static Rank getRank(String rankName) {
            for (Rank rank : Rank.values()) {
                if (rank.getRankName().equals(rankName)) {
                    return rank;
                }
            }
            return null;
        }

        @Override
        public String toString() {
            return rankName;
        }
    }
}

但是,当我尝试访问等级名称(或可能具有的任何属性)时,我仍然收到JSP错误,指出等级对象是String,而java.lang.String中不存在名为rankName的属性。这是我尝试直接获取枚举的属性时遇到的相同问题,但现在不是。这是错误消息:

javax.el.PropertyNotFoundException: Property 'rankName' not found on type java.lang.String

因此以下EL将导致错误,因为rankName显然不存在。

${sessionScope.account.player.rank}

阅读 349

收藏
2020-06-10

共1个答案

小编典典

好吧,我的问题是我将RankBean对象传递给了一个自定义的jsp标记文件,在其中使用了RankBean属性,并且定义的属性未指定类型,因此默认为java.lang.String。

2020-06-10