为什么 JSTL 抱怨一个名为 "Error" 的变量 Tomcat 8
Why does JSTL complain about a variable called "Error" with Tomcat 8
我们有一个 Web 应用程序,使用 Tomcat 7 时工作得非常好。但是当我们在 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),问题就会消失。
谁能解释一下问题出在哪里?我假设 "Error" 是一个保留字,但为什么这会影响 Tomcat 8 而不是 Tomcat 7?
谢谢,
菲尔
这里首先要注意的是 Tomcat 8 随 EL 3.0 一起提供,这与 Tomcat 7 随附的 EL 2.2 有很大不同。如果您还没有完成后,您可能想了解一些差异,包括集合流、lambda 和其他一些小的改进,如静态访问器、赋值和集合文字。
就您在 Error 中看到的行为而言,如果您将其视为 class (java.lang.Error) 则更有意义.在那种情况下,你有错误,这是一个 class 并且永远不会为空,这意味着你的 c:if 块将始终被执行。因此,您最终会得到输出中包含 class 错误的评估。
为避免此类冲突,请考虑不要使用大写字母作为变量名称中的第一个字符。如果您使用 error 而不是 Error,您就不会遇到这个问题。
我们有一个 Web 应用程序,使用 Tomcat 7 时工作得非常好。但是当我们在 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),问题就会消失。
谁能解释一下问题出在哪里?我假设 "Error" 是一个保留字,但为什么这会影响 Tomcat 8 而不是 Tomcat 7?
谢谢,
菲尔
这里首先要注意的是 Tomcat 8 随 EL 3.0 一起提供,这与 Tomcat 7 随附的 EL 2.2 有很大不同。如果您还没有完成后,您可能想了解一些差异,包括集合流、lambda 和其他一些小的改进,如静态访问器、赋值和集合文字。
就您在 Error 中看到的行为而言,如果您将其视为 class (java.lang.Error) 则更有意义.在那种情况下,你有错误,这是一个 class 并且永远不会为空,这意味着你的 c:if 块将始终被执行。因此,您最终会得到输出中包含 class 错误的评估。
为避免此类冲突,请考虑不要使用大写字母作为变量名称中的第一个字符。如果您使用 error 而不是 Error,您就不会遇到这个问题。