【问题标题】:Why am I not able to find static methods through Expression Language为什么我无法通过表达式语言找到静态方法
【发布时间】:2013-12-12 14:45:27
【问题描述】:

我有一个带有静态方法 getmyStaticMethod() 的类 MyClass 在我的 jsp 中尝试通过 EL 访问此方法时:
${MyClass.myStaticMethod}

这让我无法在 MyClass 类的对象中找到“myStaticMethod”的值 是不是因为静态方法在类级别,而只看对象级别的EL找不到它????

提前致谢。 :)

【问题讨论】:

  • 不能用EL调用静态方法。
  • 为什么?这是我的问题
  • 这是该技术的一个特点。 See here for alternatives.
  • 那么我在问题中要问的是正确的吗? “是不是因为静态方法在类级别,而只看对象级别的 EL 找不到它????”

标签: java jsp el static-methods


【解决方案1】:

JSP EL 不能访问类的静态方法。

${MyClass.myStaticMethod} 表示:在页面范围内找到一个名为“MyClass”的属性,然后在请求范围内,然后在会话范围内,然后在应用程序范围内,如果找到,则获取其名为“myStaticMethod”的属性(即在这个对象上调用getter getMyStaticMethod())。

因此,如您所见,它不会寻找名为 MyClass 的类,也不会调用其任何静态方法。而 JSP EL 无法做到这一点。

编辑:

从表达式语言规范 3.0 版(Java EE 7 的一部分)开始,可以通过以下方式访问静态字段和方法

  • JSP 中的importing the class(或包)和
  • 使用类名后跟方法:

    ${MyClass.myStaticMethod()}
    

【讨论】:

  • 这个答案从 EL 3.0 开始不再正确,它增加了对静态方法和静态字段的支持。 EL 3.0 是 Java EE 7 的一部分,因此您需要一个支持 EL 3.0 的容器,例如 Tomcat 8。
  • @MarkThomas:感谢您提供的信息。我错过了 EE 7 中的那个变化。我编辑了我的答案。
猜你喜欢
  • 2019-09-25
  • 1970-01-01
  • 2014-10-25
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
相关资源
最近更新 更多