2010-10-07 35 views
4

我從彈簧3 SVN樣本部署Petclinic中的代碼存儲庫的表達在Tomcat7,我得到以下異常:

內部錯誤

根本原因是:/WEB-INF/jsp/owners/form.jsp(4,1)「$ {owner.new}」包含無效表達式:javax.el.E​​LException:[new]不是一個有效的Java標識符org.apache.jasper.JasperException:/WEB-INF/jsp/owners/form.jsp(4,1)「$ {owner.new}」包含無效表達式:javax.el.E​​LException: [new]不是有效的Java標識符

這個表達式在SpringSloce tc Server Developer Edition 2.0中解決得非常好。

任何想法爲什麼Tomcat 7.0.2有問題嗎?

回答

1

我的猜測是,Tomcat 7中的EL分析器比tcServer(基於Tomcat 6)中的EL分析器要嚴格一些。

我建議在http://jira.springsource.org上提交一個bug來達到這個效果,這幾乎肯定是他們想要解決的問題。

+1

無論Tomcat 7 EL分析器是否更嚴格,該類都有一個'isNew()'方法,使用'$ {owner.new}'是合法的。因此我認爲這是Tomcat 7中的一個EL * bug。它應該是固定的Tomcat。 – 2010-10-07 13:15:06

2

EL規範不允許使用Java關鍵字作爲標識符。 「new」是一個Java關鍵字,因此$ {owner.new}不是合法的EL。 Tomcat 7默認執行此規則(Tomcat 6不支持向後兼容)。該錯誤在Spring示例應用程序中。

4

Bozho曾報告過這個bug:50147 - static is not a valid identifier

它歸結爲:

本次討論的重要組成部分,是21頁(在EL規格)。

Identifier ::= Java language identifier

Java語言標識符由Java Language Specification(JLS)定義。

在JLS的chapter 3.8中指定了標識符,它確實確認標識符可能不是關鍵字。 按照bug報告中,您需要訪問它改爲如下:

${owner['new']} 

${owner.isNew()} 
0

它將與${owner.isNew()}而不是${owner.new}工作。

+0

這確實會以這種方式工作,但這不是** Tom ** 7 EL分析器中的一個錯誤。另請參閱https://issues.apache.org/bugzilla/show_bug.cgi?id=50147(鏈接到我在這個問題上的回答)。 Tomcat的開發者之一markt_asf也在這個問題上發佈了一個答案。 – BalusC 2011-10-03 21:28:25