【问题标题】:Why does JSTL complain about a variable called "Error" with Tomcat 8为什么 JSTL 在 Tomcat 8 中抱怨一个名为“错误”的变量
【发布时间】:2015-02-19 12:57:07
【问题描述】:

我们有一个使用 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 端传递的变量更改为“错误”以外的任何内容(例如 XXXError),问题就会消失。

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

谢谢,

菲尔

【问题讨论】:

    标签: java tomcat jstl


    【解决方案1】:

    首先要注意的是 Tomcat 8 附带 EL 3.0,这与 Tomcat 7 附带的 EL 2.2 有很大不同。如果您还没有这样做,您可能需要阅读关于其中的一些差异,包括集合流、lambda 和其他一些小的改进,如静态访问器、赋值和集合字面​​量。

    就您在 Error 中看到的行为而言,如果您将其视为一个类 (java.lang.Error),它会更有意义。在这种情况下,您有 Error,它是一个类并且永远不会为 null,这意味着您的 c:if 块将始终被执行。因此,您最终会评估 Error 包含在输出中的类。

    为避免此类冲突,请考虑不要在变量名称中使用大写字母作为第一个字符。如果你使用 error 而不是 Error,你就不会看到这个问题。

    【讨论】:

    • 关于不遵循变量命名约定的要点
    • 很好的答案 - 这正是我喜欢 Stack Overflow 的原因:问题说明、解决方法以及在哪里可以找到更多信息。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2020-08-12
    相关资源
    最近更新 更多