【问题标题】:OGNL invoke an enum's static property's methodOGNL 调用枚举的静态属性的方法
【发布时间】:2014-10-23 19:04:03
【问题描述】:

我有一个这样的枚举:

package languages;

public enum Language
{
  ENG, GER, FRA;

  public static final Language DEFAULT = ENG;
}

我想通过在其上调用name() 方法,使用OGNL 获取JSP 中的DEFAULT 静态变量的名称。

我尝试了这些,但都没有奏效:

  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()" />

【问题讨论】:

  • 已在 OGNL 3.1.2 中修复。

标签: static struts2 ognl


【解决方案1】:

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

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

你的表情会是这样的:

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

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

【讨论】:

    【解决方案2】:

    修复 ognl 库相对容易,如下所述:https://issues.apache.org/jira/browse/WW-4479

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      相关资源
      最近更新 更多