I am setting a sessionScope object when a user logs in, and that bean object is composed of a couple of other beans. One of the properties for these beans was an enum, but I found out that EL cannot get the properties of an enum class, and that it can only get the properties of a java bean object. So I decided to make a bean class for the enum, and have the enum nested in that bean class. the java bean that I made to replace the enum so that I can get its values with EL looks something like this:
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;
}
}
}
However, when I try to access the rank name (or what ever property there may be), I still get a JSP error saying that the rank object is a String and a property named rankName does not exist in java.lang.String. This is the same problem I had when I was trying to get the properties of the enum directly, but now I am not. Here is the error message:
javax.el.PropertyNotFoundException: Property 'rankName' not found on type java.lang.String
So the following EL would cause error because rankName apparently doesnt exist.
${sessionScope.account.player.rank}
Well my problem was that I was passing the RankBean object to a custom jsp tag file where I used the RankBean properties, and the defined attribute did not specify a type so it defaulted to java.lang.String.
I can not see the setter method of rankname in the above code.
I think this would be
setRankName