2010-10-07 61 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