枚举被解释为字符串

2023-12-21

当用户登录时,我设置一个 sessionScope 对象,并且该 bean 对象由几个其他 bean 组成。这些bean的属性之一是枚举,但我发现EL无法获取枚举类的属性,并且它只能获取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 错误,指出排名对象是一个字符串,并且 java.lang.String 中不存在名为rankName 的属性。这与我尝试直接获取枚举属性时遇到的问题相同,但现在不是了。 这是错误消息:

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

所以下面的 EL 会导致错误,因为rankName显然不存在。

${sessionScope.account.player.rank}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

枚举被解释为字符串 的相关文章

随机推荐