我在用户登录时设置sessionScope对象,并且该bean对象由其他几个bean组成。这些bean的其中一个属性是枚举,但我发现EL无法获得枚举类的属性,并且它只能获取java bean对象的属性。所以我决定为枚举创建一个bean类,并将enum嵌套在该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,而名为rankName的属性在java.lang.String中不存在。这是我在直接获取枚举属性时遇到的问题,但现在我不是。 以下是错误消息:
javax.el.PropertyNotFoundException: Property 'rankName' not found on type java.lang.String
所以下面的EL会导致错误,因为rankName明显犯规存在。
${sessionScope.account.player.rank}
哦,不,这只是我没有复制和粘贴问题的例子。实际的代码有更多的属性,但getters和setter是自动生成的,所以他们是正确的。 –