我在用戶登錄時設置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是自動生成的,所以他們是正確的。 –