【问题标题】:Java keywords not allowed as EL identifiersJava 关键字不允许作为 EL 标识符
【发布时间】:2011-04-30 11:17:31
【问题描述】:

最近我将我的开发 tomcat 从 7.0.0 升级到了 7.0.4。我有这样的事情:

<c:set var="static" value=".." />
<c:set var="class" value=".." />

两者都在 7.0.0 上工作,但在 7.0.4 上停止工作。我opened a bug,已经关门了,答案是:

该标签本身会编译。

对 Java 标识符的检查已添加到 EL 处理中,所以我怀疑 你在页面的其他地方有一些非法的 EL。

这听起来不太清楚,但我没有得到后续答案,所以我查看了 EL 规范。对于 JSP 2.1(最新的是 2.2),我发现:

第 1 章,第 21 页:标识符被限制为 Java 标识符 - 例如,无 -、无 / 等。

这是我发现的最多的。我会以适用于 java 标识符的语法要求的方式阅读这一行,而不是保留字(因为相邻的 classstatic 出现在 EL 的保留字列表中)。 JLS 不是指“Java 标识符”一词(它是针对 2.2 规范中的其他一些情况,我没有完全审查)

那么,Tomcat 有权拒绝这些名称吗?他们指的是规范的哪一点,您认为他们的解释是否正确。

【问题讨论】:

    标签: java jsp tomcat el


    【解决方案1】:

    来自JSP 2.2 EL specification

    1.14 保留字

    以下字词为该语言保留,不得用作 标识符。

    和 eq gt true instanceof 或 ne le false 空 不是 ge null div mod

    请注意,其中许多词现在不在该语言中,但它们可能在 未来,因此开发人员必须避免使用这些词。

    我没有看到staticclass 等。Tomcat 7.0.4 中的这种更改对我来说没有意义

    【讨论】:

    • 是的,似乎对 JLS 的引用已添加到规范中。
    【解决方案2】:

    规范说标识符仅限于在 Java 中有效的标识符。

    staticclass 都是 Java 关键字,因此不可能是有效标识符。例如,你不能这样写:

    public int static = 7;
    

    因此staticclass 都不是有效的标识符。

    【讨论】:

      猜你喜欢
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 2011-02-18
      相关资源
      最近更新 更多