2010-10-25 66 views
8

最近我將我的開發tomcat從7.0.0升級到7.0.4。我有這樣的東西:Java關鍵字不允許作爲EL標識符

<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是否有權拒絕這些名稱;他們指的是哪一點,你認爲他們是否正確地解釋了它。

回答

5

規範說明標識符僅限於在Java中有效的標識符。

staticclass都是Java關鍵字,因此不可能是有效的標識符。你不能,例如,這樣寫:

public int static = 7; 

所以既不static也不class將是有效的標識符這裏無論是。

3

JSP 2.2 EL specification

1.14保留字

下面的字保留的語言,不得用作 標識符。

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

注意,很多的這些話是不是在現在的語言,但他們可能會在未來 ,所以開發人員必須避免使用這些詞。

我沒有看到staticclass,等等。這不意義,我改變Tomcat的7.0.4

+0

是的,它似乎提到了JLS被添加到規範中。 – Bozho 2010-10-26 09:17:25

相關問題