为啥我无法通过表达式语言找到静态方法
Posted
技术标签:
【中文标题】为啥我无法通过表达式语言找到静态方法【英文标题】: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 找不到它????” 【参考方案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 中的那个变化。我编辑了我的答案。以上是关于为啥我无法通过表达式语言找到静态方法的主要内容,如果未能解决你的问题,请参考以下文章