2011-08-17 12 views
10

Se faccio:Un file di tag JSP può accedere al suo PageContext di JSP di chiamata?

<% pageContext.setAttribute("foo", "bar"); %> 
<custom:myTag/> 

sembra che dovrei essere in grado di fare:

<%= pageContext.getAttribute("foo") %> 

all'interno di myTag.tag ... ma ovviamente non posso perché i doesn di file tag 'ha accesso a pageContext (invece ha accesso a un jspContext ... che non ha gli stessi attributi del pageContext della pagina chiamante).

Ora, è possibile accedere alla pageContext via ELScript:

${pageContext} 

ma che non aiuta perché ELScript non ha modo di passare argomenti, quindi non si può fare:

${pageContext.getAttribute("foo")} 

Tuttavia, il fatto che ELscript possa accedere al contesto della pagina e il fatto che il tag possa accedere a tutti i tipi di variabili come jspContext, è necessario che ci sia un modo per un tag di accedere (in un modo scriptlet/Java, non solo in ELScript) un attributo dal pageContext del JSP chiamante.

Esiste?

risposta

7

Per quanto riguarda EL, il ${pageContext.getAttribute("foo")} funziona solo in EL 2.2. Prima che la sintassi corretta sia ${pageContext.foo} o solo ${foo}. Vedi anche il nostro EL wiki page.

Tuttavia, lo ${pageContext} non è condiviso tra il file JSP principale e il tag JSP. Ognuno ha la sua istanza.

Si potrebbe sia impostarlo come attributo richiesta invece:

<% request.setAttribute("foo", "bar") %> 
<custom:myTag /> 

con nel tag

<%= request.getAttribute("foo") %> 

o, con EL

${requestScope.foo} 

o

${foo} 

O, meglio, si poteva passare come un attributo di tag fullworthy

<custom:myTag foo="bar" /> 

con nel tag

<%@attribute name="foo" required="true" %> 
${pageContext.foo} 

o semplicemente

<%@attribute name="foo" required="true" %> 
${foo} 
+0

Grazie, ma il fatto è che ho già ottenuto le variabili che voglio nel pageContext e abbastanza codice (legacy) che li fa riferimento lì che non voglio doverle modificare per richiedere attributi. Quindi * posso * inserire solo copie duplicate nella richiesta, ma speravo che ci fosse un altro modo per farlo. Oh, e queste variabili verranno superate MOLTO in un sacco di tag se li creo attributi, quindi speravo davvero in una soluzione "dietro le quinte". Se non è possibile accedere al pageContext del JSP dal tag però ... indovina sono sfortunato :-( – machineghost

+0

Puoi semplicemente accedere al contesto attuale della pagina con (PageContext) getJspContext(). Vedi la mia risposta qui sotto. –

+0

@ Jason: la domanda non riguardava questo. – BalusC

1

Sembra che in WebLogic 10 almeno, l'oggetto implicito "applicazione" è disponibile nei file di tag ed è instanceof ServletContext. Forse usa questo, quando è veramente il ServletContext che uno è dopo, e non necessariamente il più alto livello di paginaContext.

Problemi correlati