我在用户登录时设置了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}
答案 0 :(得分:1)
我的问题是我将RankBean对象传递给自定义的jsp标记文件,其中我使用了RankBean属性,并且定义的属性没有指定类型,因此它默认为java.lang.String。
答案 1 :(得分:0)
我在上面的代码中看不到rankname的setter方法。
public void setankName(String rankName) {
this.rankName = rankName;
}
我认为这将是setRankName