当用户登录时,我正在设置一个 sessionScope 对象,并且该 bean 对象由几个其他 bean 组成。这些 bean 的属性之一是枚举,但我发现 EL 无法获取枚举类的属性,它只能获取 java bean 对象的属性。所以我决定为枚举创建一个 bean 类,并将枚举嵌套在该 bean 类中。我用来替换枚举以便我可以用 EL 获取它的值的 java bean 看起来像这样:
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}