枚举被解释为字符串

时间:2013-10-07 04:51:39

标签: jsp jsf enums el

我在用户登录时设置了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错误,说明rank对象是一个String,并且java.lang中不存在名为rankName的属性。串。这是我在尝试直接获取枚举属性时遇到的同样问题,但现在我不是。 以下是错误消息:

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

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

${sessionScope.account.player.rank}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我在上面的代码中看不到rankname的setter方法。

public void setankName(String rankName) {


 this.rankName = rankName;
    }

我认为这将是setRankName