2011-08-17 12 views
10

Si hago:¿Puede un archivo de etiqueta JSP acceder a su llamada a PageContext de JSP?

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

que parece que debería ser capaz de hacer:

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

interior de myTag.tag ... pero por supuesto no puedo porque los archivos doesn etiqueta No tiene acceso a pageContext (en cambio, tiene acceso a jspContext ... que no tiene los mismos atributos que el pageContext de la página llamante).

Ahora, puede acceder a través de la pageContext ELScript:

${pageContext} 

pero eso no ayuda porque ELScript no tiene manera de pasar argumentos, por lo que no puede hacer:

${pageContext.getAttribute("foo")} 

Sin embargo, el hecho de que ELscript puede acceder al contexto de la página, y el hecho de que la etiqueta puede acceder a todo tipo de variables como jspContext, que debe haber alguna manera de acceder a una etiqueta (en una lógica scriptlet/Java, no solo en ELScript) un atributo de la llamada JSP's pageContext.

¿Lo hay?

Respuesta

7

En cuanto a EL, el ${pageContext.getAttribute("foo")} solo funciona en EL 2.2. Antes, la sintaxis correcta es ${pageContext.foo} o simplemente ${foo}. Vea también nuestro EL wiki page.

Sin embargo, ${pageContext} no se comparte entre el archivo JSP primario y la etiqueta JSP. Cada uno tiene su propia instancia.

Usted podría bien configurarlo como atributo de la petición en su lugar:

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

con la etiqueta

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

o, con EL

${requestScope.foo} 

o

${foo} 

O, mejor, usted podría pasar como un atributo de etiqueta fullworthy

<custom:myTag foo="bar" /> 

con la etiqueta

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

o simplemente

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

Gracias, pero la cuestión es que ya tengo las variables que quiero en pageContext, y suficiente código (heredado) que las haga referencia allí que no quiero tener que cambiarlas para solicitar atributos. Así que * puedo * simplemente poner copias duplicadas en la solicitud también, pero esperaba que hubiera alguna otra forma de hacerlo. Ah, y estas variables se aprobarán MUCHO en MUCHAS etiquetas si las hago de atributos, así que realmente esperaba una solución "entre bastidores". Si no hay forma de que sea posible acceder al pageContext de JSP desde la etiqueta ... supongo que no he tenido suerte :-( – machineghost

+0

Puede acceder al contexto de la página real con (PageContext) getJspContext(). Consulte mi respuesta a continuación. –

+0

@Jason: la pregunta no era sobre eso. – BalusC

1

se ve como en WebLogic 10 como mínimo, el objeto implícito de "aplicación" es disponible en archivos de etiquetas, y es instancia de ServletContext. Tal vez use esto, cuando en realidad es el ServletContext el que busca, y no necesariamente el pageContext de nivel superior.

Cuestiones relacionadas