我们有一个Web应用程序,现在需要从jsp文件中调用方法。 我们以前使用过Tomcat6,所以我们采取了以下步骤
现在,通过{$bean.object}
访问具有getter和setter的对象可以正常工作,但是通过{$bean.method}
调用方法会引发以下错误
org.apache.jasper.JasperException: /WEB-INF/jsp/home.jspx (line: 15, column: 52) "${bean.method()}" contains invalid expression(s): de.odysseus.el.tree.TreeBuilderException: Error parsing '${bean.method()}': syntax error at position 29, encountered '(', expected '}'
我读到其他人遇到类似问题(例如here)。
虽然项目依赖于大量外部库,但是没有特定于servletcontainer的文件位于/WEB-INF/lib
文件夹中。
我的问题是:
答案 0 :(得分:0)
我们使用旧版本的shindig,它本身使用JUEL 2.1.x,因此不支持EL 2.2;更新到新的shindig版本应解决该问题,因为它支持JSP 2.2规范。
答案 1 :(得分:0)
根据错误中列出的类,Web应用程序依赖于JUEL。
您正在使用的表达式包括方法调用。在EL 2.2(JavaEE 6)中添加了方法调用。 JUEL声称支持EL 2.2,因此看起来您的Web应用程序捆绑了旧版本的JUEL。
一种解决方案是更新该依赖关系。
第二种解决方案是完全放弃JUEL。 Tomcat 7包含一个EL 2.2实现,EL发现机制意味着无论使用哪个EL都应该找到Tomcat的实现,如果它找不到JUEL。
最后,我注意到EL已经在EL 3.0(JavaEE 7)中发挥了重要作用,并且没有明显的JUEL实现EL 3.0的迹象,而在Tomcat 8和其他容器中可以使用EL 3.0实现一段时间我建议向JUEL开发人员询问有关EL 3.0的计划,并根据他们的回应仔细考虑继续使用JUEL。