2010-10-25 11 views
8

Recentemente ho aggiornato il mio sviluppo tomcat da 7.0.0 a 7.0.4. Ho avuto cose come:Parole chiave Java non consentite come identificatori EL

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

Entrambi hanno funzionato su 7.0.0 ma hanno smesso di funzionare su 7.0.4. I opened a bug, è stato chiuso, con la risposta che:

In sé e per sé, tale tag verrà compilato.

I controlli per gli identificatori Java sono stati aggiunti all'elaborazione EL, quindi ho il sospetto che abbia qualche EL non valido altrove nella pagina.

Questo non suona abbastanza chiaro, ma non ho avuto una risposta successiva, quindi ho guardato le specifiche EL. Per la JSP 2.1 (l'ultimo dei quali 2.2) ho scoperto che:

Capitolo 1, pagina 21: un identificatore è vincolato ad essere un identificatore Java - per esempio, no -, no /, ecc

E questo è il massimo che ho trovato. Vorrei leggere questa riga in modo che si applichino i requisiti di sintassi applicabili agli identificatori java, ma non le parole riservate (poiché neighter class o static appaiono nell'elenco delle parole riservate in EL). Il JLS non è riferito al termine "identificativo Java" (ed è per altri casi nelle specifiche 2.2, che non ho esaminato completamente)

Quindi, Tomcat ha ragione di rifiutare questi nomi; a quale punto della specifica si riferisce, e pensi che lo stiano interpretando correttamente.

risposta

5

La specifica dice che gli identificatori sono limitati agli identificatori che sarebbero validi in Java.

Entrambe static e class sono parole chiave Java e pertanto non possono essere identificativi validi. Non si poteva, ad esempio, scrivere questo:

public int static = 7; 

E così né staticclass sarà identificatori validi neanche qui.

3

Da JSP 2.2 EL specification:

1.14 parole riservate

Le seguenti parole sono riservate per la lingua e non deve essere utilizzato come identificatori.

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

Si noti che molte di queste parole non sono nella lingua ora, ma possono essere in futuro, quindi gli sviluppatori devono evitare di usare queste parole.

Non vedo static, class, ecc Questo cambiamento di Tomcat 7.0.4 non fa senso per me.

+0

sì, sembra che un riferimento al JLS è stato aggiunto alle specifiche. – Bozho

Problemi correlati