2013-10-07 120 views
2

我在用戶登錄時設置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} 

回答

0

那麼我的問題是,我經過RankBean對象定製JSP標記文件,我使用的RankBean屬性和定義的屬性沒有指定一個類型所以它默認爲java.lang.String。

0

我無法在上面的代碼中看到rankname的setter方法。

public void setankName(String rankName) { 


this.rankName = rankName; 
    } 

我認爲這將是setRankName

+0

哦,不,這只是我沒有複製和粘貼問題的例子。實際的代碼有更多的屬性,但getters和setter是自動生成的,所以他們是正確的。 –