OGNL调用一个枚举的静态属性的方法(OGNL invoke an enum's stati

2019-10-21 04:31发布

我有一个这样的枚举:

package languages;

public enum Language
{
  ENG, GER, FRA;

  public static final Language DEFAULT = ENG;
}

我想获得的名称DEFAULT静态变量JSP使用OGNL通过调用name()方法就可以了。

我尝试了这些,但他们没有工作:

  1. <s:property value="%{@languages.Language@DEFAULT.name()}" />
  2. <s:property value="@languages.Language@DEFAULT.name()" />
  3. <s:property value="@languages.Language@DEFAULT@name()" />

但是这个工作: <s:property value="@languages.Language@ENG.name()" />

Answer 1:

你不能。 至少不是W / O一些解决方法。

当谈到访问枚举静态字段- OGNL会调用静态valueOf方法java.lang.Enum类。

随着你的表情这将是类似的东西:

Enum.valueOf(Language.class, "DEFAULT");

这将导致java.lang.IllegalArgumentException被抛出,因为指定的枚举类型没有恒定的具有指定名称。



Answer 2:

这是比较容易解决的OGNL库如下所述: https://issues.apache.org/jira/browse/WW-4479

希望这将使其成为未来的struts2的版本。



文章来源: OGNL invoke an enum's static property's method