2014-02-25 138 views
1

我們有一個web應用程序,現在需要從jsp文件中調用方法。 我們以前使用的Tomcat6,所以我們採取了以下措施從JSP調用Tomcat 7方法

  • 遷移到Tomcat 7
  • 聲明Servlet的第3版在web.xml
  • 我們servlet.xml中暴露豆

現在,通過{$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)。

儘管項目依賴於大量的外部庫,但沒有一個metnioned servletContainer特定的文件夾位於/WEB-INF/lib文件夾中。

我的問題是:

  • 我怎麼能確定一個庫是特定於一箇舊版本的Tomcat?
  • 是否有任何其他可能的來源爲此錯誤?

回答

0

根據錯誤中列出的類,Web應用程序依賴於JUEL

您使用的表達式包含方法調用。在EL 2.2(JavaEE 6)中添加了方法調用。 JUEL宣稱支持EL 2.2,因此看起來您的Web應用程序捆綁了舊版本的JUEL。

一個解決方案是更新該依賴關係。

第二種解決方案是完全放棄JUEL。 Tomcat 7包含EL 2.2實現,EL發現機制意味着無論使用EL,只要找不到JUEL就可以找到Tomcat的實現。最後,我會注意到EL已經在EL 3.0(JavaEE 7)中有了很大的發展,而且沒有明顯的JUEL實現EL 3.0的跡象,而EL 3.0實現已經在T​​omcat 8和其他容器中可用一段時間。我建議向JUEL開發者提供關於EL 3.0的計劃,並且仔細考慮繼續使用JUEL。

0

我們使用了舊版本的shindig,它本身使用JUEL 2.1.x,因此不支持EL 2.2;更新到新的shindig版本應該可以解決問題,因爲它支持JSP 2.2規範。