Ключевые слова Java не допускаются в качестве идентификаторов EL - PullRequest
8 голосов
/ 26 октября 2010

Недавно я обновил свой tomcat для разработки с 7.0.0 до 7.0.4. У меня были такие вещи, как:

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

Оба работали на 7.0.0, но перестали работать на 7.0.4. Я открыл ошибку , она была закрыта, с ответом:

Сам по себе этот тег будет компилироваться.

Проверки идентификаторов Java были добавлены в обработку EL, поэтому я подозреваю у вас есть незаконный EL в другом месте на странице.

Это звучало не совсем ясно, но я не получил последующего ответа, поэтому я посмотрел на спецификацию EL. Для JSP 2.1 (последняя версия 2.2) я обнаружил, что:

Глава 1, стр. 21: идентификатор должен быть идентификатором Java - например, нет -, нет / и т. Д.

И это самое, что я нашел. Я прочел бы эту строку таким образом, чтобы применялись требования синтаксиса, применяемые к идентификаторам Java, но не зарезервированные слова (так как соседние class или static появляются в списке зарезервированных слов в EL). JLS не упоминается для термина «идентификатор Java» (и для некоторых других случаев в спецификации 2.2, которые я не рассмотрел полностью)

Итак, вправе ли Tomcat отклонить эти имена; на какую точку спецификации они ссылаются, и, по-вашему, они правильно ее интерпретируют.

Ответы [ 2 ]

5 голосов
/ 26 октября 2010

В спецификации сказано, что идентификаторы ограничены идентификаторами, которые будут действительны в Java.

И static, и class являются ключевыми словами Java и поэтому не могут быть допустимыми идентификаторами. Вы не могли, например, написать это:

public int static = 7;

И поэтому ни static, ни class здесь также не будут действительными идентификаторами.

3 голосов
/ 26 октября 2010

С Спецификация JSP 2.2 EL :

1.14 Зарезервированные слова

Следующие слова зарезервированы для языка и не должны использоваться как идентификаторы.

    and   eq     gt     true   instanceof
    or    ne     le     false  empty
    not   lt     ge     null   div        mod

Обратите внимание, что многие из этих слов сейчас не на языке, но они могут быть в будущее, поэтому разработчики должны избегать использования этих слов.

Не вижу static, class и т. Д. Это изменение в Tomcat 7.0.4 не имеет для меня смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...