为什么JSTL会抱怨Tomcat 8中名为“Error”的变量

时间:2015-02-19 12:57:07

标签: java tomcat jstl

我们有一个使用Tomcat 7完全正常工作的Web应用程序。但是当我们在Tomcat 8上部署它时,我们总是在HTML页面上看到错误:

Error
javax.el.ELClass@550077ee 

HTML页面是使用JSP和JSTL创建的。错误区域的JSTL代码是:

<c:if test="${Error!=null}">
  <span>${Error}</span>
</c:if>

通过简单地将从Java端传递的变量更改为除“Error”之外的任何内容(例如XXXError),问题就会消失。

那么有人可以解释问题是什么吗?我假设“错误”是一个保留字,但为什么这会影响Tomcat 8而不影响Tomcat 7?

谢谢,

菲尔

1 个答案:

答案 0 :(得分:3)

首先要注意的是Tomcat 8附带了EL 3.0,这与Tomcat 7附带的EL 2.2有很大的不同。如果你还没有这样做,你可能想要阅读一些差异,包括集合流,lambdas和其他一些小改进,如静态访问器,赋值和集合文字。

对于您使用错误看到的行为,如果您将其视为一个类(java.lang.Error),则更有意义。在这种情况下,你有一个错误,它是一个类,永远不会为null,这意味着你的 c:if 块将永远执行。因此,您最终会对输出中包含的类的Error进行评估。

为避免这样的冲突,请考虑不要使用大写字母作为变量名称中的第一个字符。如果您使用了错误而不是错误,那么您就不会遇到此问题。