2011-10-17 10 views
16

Estoy tratando de acceder a algunas variables JSTL que se establecieron en un for-loop JSTL en una inclusión.Pasando c: para cada variable a un jsp: include

Ejemplo:

<c:forEach items="${cart.entries}" var="entry"> 
<jsp:include page="helper.jsp"></jsp:include> 
</c:forEach> 

Dentro helper.jsp Quiero ser capaz de hacer referencia a la 'entrada' variable. Sigue apareciendo como 'vacío'. Pensé que tal vez podría haber una forma de agregar alcance a la variable para cada variable como lo haría con las variables de configuración normales.

¿Alguna idea?

Respuesta

25

RESPUESTA: Terminé teniendo que hacer esto para que funcione.

<c:forEach items="${cart.entries}" var="entry"> 
<c:set var="entryFC" value="${entry}" scope="request"></c:set> 
<jsp:include page="helper.jsp"></jsp:include> 
</c:forEach> 

Luego hice referencia al entryFC en mi inclusión. No es muy elegante en absoluto, pero funciona, así que supongo que iré con él.

+11

Estaba buscando una manera más elegante, pero terminé haciendo esto. Por cierto, no es necesario cambiar el nombre de la variable: '' funciona bien y es probable que sea menos confuso . – Dmitri

0

Sé que es muy tarde para responder a esta pregunta, pero puede ser útil para aquellos que se quedaron en esta situación y buscando respuestas.

Mi respuesta funcionará si no está estrictamente obligado a usar la etiqueta <jsp: include> para incluir jsp. En su lugar, puede usar <%@include file="/WEB-INF/views/path-to-jsp.jsp" %> para importar otro jsp en la página y esta página puede usar su variable de bucle de etiquetas <c:forEach>.

Por ejemplo.

<c:forEach items="${users}" var="user"> 

    <%@include file="/WEB-INF/views/path-to-jsp.jsp" %> <!-- here ${user} can be use in importing jsp file. --> 
</c:forEach> 

Se está trabajando porque <%@include file="" %> etiqueta inyectará el contenido del archivo con el nombre en el JSP que contienen la etiqueta, como si hubiera sido copiado y pegado. Esto se hace antes de analizar el contenido del archivo incluido, en lugar de analizarlo mientras se analiza el JSP que lo contiene. Esto es más parecido a una directiva C#include, donde durante el preprocesamiento, el archivo incluido se "pega" en su lugar antes de compilar el archivo. Después de que se incluye el contenido, se evalúa, todo en el mismo contexto y, por lo tanto, con los mismos accesos y restricciones que tendría el código incluido si los contenidos se escribieran simplemente en su lugar.

Considerando que, <jsp:include page=""/> etiqueta se comporta de manera diferente en que el resultado de la prestación de la página especificada se inyecta en el JSP que contiene en el punto de la etiqueta. Esto se hace básicamente enviando la página solicitada al mismo contenedor, como una solicitud de representación por separado, y tomando los resultados, no el contenido del archivo. Esta solicitud se realiza en su propio contexto, lo que significa que no utiliza la misma información de página que la página que contiene la etiqueta. Esto puede ser útil, especialmente si el contenido incluido puede tener variables conflictivas, por ejemplo.

Cuestiones relacionadas