2010-10-13 14 views
5

He encontrado algunas otras preguntas que describen una situación similar, pero no idéntica, a la mía. This question, por ejemplo, muestra más o menos el mismo problema, excepto que no estoy usando portlets; solo estoy usando aburridos ol JSP + JSTL + EL +, etc.¿Cómo paso un parámetro a un JSP a través de una importación JSTL de contexto cruzado?

Tengo dos contextos de aplicación y me gustaría importar un JSP de uno a otro. Yo sé cómo hacer eso:

<c:import context="/" url="/WEB-INF/jsp/foo.jsp"/> 

Sin embargo, también quiero pasar un parámetro a la foo.jsp importado. Pero este código:

<c:import context="/" url="/WEB-INF/jsp/foo.jsp"> 
    <c:param name="someAttr" value="someValue"/> 
</c:import> 

no parece enviar correctamente el parámetro a foo.jsp; Si foo.jsp es algo así como *

<% System.out.println("foo.jsp sees that someAttr is: " 
         + pageContext.findAttribute("someAttr")); %> 

entonces esto se imprime:

foo.jsp sees that someAttr is: null 

mientras que yo quiero ver esto:

foo.jsp sees that someAttr is: someValue 

así, obviamente, someAttr que no se encuentra en foo.jsp.

¿Cómo puedo solucionar esto?


* (sí, lo sé, scriplets==bad, esto es sólo para la depuración de éste problema)

+0

¿Cómo se asegura de que su 'foo.jsp' se haya importado realmente? –

+1

@Adeel: No estoy seguro de ver a qué te refieres. Cuando solicito una página que importe 'foo.jsp', veo que' println' aparece en mi consola, y veo un intento de procesar el otro contenido de 'foo.jsp', excepto que depende de' $ { someAttr} '. Lo siento, es tarde para mí, ¿eso lo contesta? –

Respuesta

6

está configurando como un parámetro de la petición, por lo que también debería estar recibiendo como parámetro de la petición .

Ya que parece que no les gusta scriptles así, aquí está una solución EL:

${param.someAttr} 

Tenga en cuenta que <c:import> no aporta ninguna ventaja extra sobre <jsp:include> en este caso particular. Es útil cuando quiera importar archivos de un contexto diferente o un dominio completamente diferente, pero este no parece ser el caso ahora. Lo siguiente debe también acaba de haber funcionado:

<jsp:include page="/WEB-INF/jsp/foo.jsp"> 
    <jsp:param name="someAttr" value="someValue" /> 
</jsp:include> 

De esta manera la página incluida tiene acceso a la misma y PageContextHttpServletRequest como el principal JSP. Esto puede terminar siendo más útil.

+0

En realidad estoy tratando de importar JSP desde un contexto diferente. Trataré de recuperarlo con tu sugerencia '$ {param.someAttr}' - si eso funciona, ¿hay alguna forma de acceder a 'someAttr' como si fuera un atributo de la página/solicitud/etc. (por ejemplo, como' $ { someAttr} ')? –

+0

No, se trata de una solicitud diferente. Lo mejor que puede hacer una sesión es si los contextos comparten la misma sesión (configurable en la configuración del servidor).De todos modos, preferiría los parámetros de solicitud para evitar enfrentamientos imprevistos entre diferentes solicitudes en la misma sesión. – BalusC

+0

Spot on como siempre. ¡Gracias! –

Cuestiones relacionadas