2010-10-25 10 views
8

Niedawno zaktualizowałem swój tomcat programisty z 7.0.0 na 7.0.4. Miałem takie rzeczy jak:Słowa kluczowe Java nie są dozwolone jako identyfikatory EL

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

Oba działały na wersji 7.0.0, ale przestały działać w wersji 7.0.4. I opened a bug, został zamknięty, z odpowiedzią, która:

Sam w sobie, ten tag zostanie skompilowany.

Kontrole dla identyfikatorów Java zostały dodane do przetwarzania EL, więc podejrzewam, że w innym miejscu strony znajdują się jakieś nielegalne EL.

To nie było całkiem jasne, ale nie otrzymałem kolejnej odpowiedzi, więc spojrzałem na specyfikację EL. Dla JSP 2.1 (najnowsza bycia 2.2) Okazało się, że:

rozdział 1, strona 21: Identyfikator jest ograniczony być identyfikator Java - np, nie - nie/itp

I to jest najbardziej, co znalazłem. Czytałbym ten wiersz w taki sposób, że mają zastosowanie wymagania dotyczące składni obowiązujące dla identyfikatorów java, ale nie zastrzeżone słowa (ponieważ neusze class ani static pojawiają się na liście zarezerwowanych słów w EL). JLS nie jest określany jako "identyfikator Java" (i jest to w przypadku niektórych innych przypadków w specyfikacji 2.2, których nie sprawdzałem w całości).

Tak, Tomcat słusznie odrzuca te nazwy; w którym punkcie specyfikacji się powołują i czy sądzisz, że interpretują to poprawnie.

Odpowiedz

5

Specyfikacja mówi, że identyfikatory są ograniczone do identyfikatorów, które byłyby poprawne w Javie.

Zarówno static, jak i class są słowami kluczowymi Java i dlatego nie mogą być poprawnymi identyfikatorami. Nie można, na przykład, napisać tak:

public int static = 7; 

A więc ani static ani class będą ważne identyfikatory tutaj albo.

3

Od JSP 2.2 EL specification:

1.14 słowa zastrzeżone

Następujące słowa są zarezerwowane dla języka i nie może być stosowany jako identyfikatorów.

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

pamiętać, że wiele z tych słów nie są w języku teraz, ale mogą być w przyszłości , więc deweloperzy muszą unikać używania tych słów.

nie widzę static, class, itd. Ta zmiana Tomcat 7.0.4 nie dla mnie sensu.

+0

tak, wydaje się, że do specyfikacji dodano odniesienie do JLS. – Bozho

Powiązane problemy