2013-10-07 168 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是自动生成的,所以他们是正确的。 –