OGNL调用枚举的静态属性方法

时间:2014-10-23 19:04:04

标签: static struts2 ognl

我有一个这样的枚举:

package languages;

public enum Language
{
  ENG, GER, FRA;

  public static final Language DEFAULT = ENG;
}

我想通过调用DEFAULT方法,使用JSPOGNL中获取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()" />
  4. 但这有效: <s:property value="@languages.Language@ENG.name()" />

2 个答案:

答案 0 :(得分:1)

你做不到。至少没有一些解决方法。

在访问枚举中的静态字段时 - OGNL将调用valueOf类的静态java.lang.Enum方法。

用你的表达式会是这样的:

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

由于指定的枚举类型没有指定名称的常量,导致java.lang.IllegalArgumentException被抛出。

答案 1 :(得分:1)

按照此处所述修复ognl库相对容易:https://issues.apache.org/jira/browse/WW-4479

希望它能够成为未来的struts2版本。