2011-10-17 17 views
16

Próbuję uzyskać dostęp do niektórych zmiennych JSTL, które zostały ustawione w pętli for JSTL w dołączeniu.Przekazywanie c: forEach zmienna do jsp: include

Przykład:

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

Wewnątrz helper.jsp Chcę być w stanie odwołać się do zmiennej 'wejście'. Nadchodzi jako "pusty". Pomyślałem, że być może istnieje sposób na dodanie zakresu do zmiennej forEach tak, jak to możliwe za pomocą normalnych zmiennych zestawu.

Wszelkie pomysły?

Odpowiedz

25

ANSWER: Skończyło się na tym, że musiałem to zrobić, aby zadziałało.

<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> 

Następnie odwoływałem się do entryFC w moim dołączeniu. Niezbyt elegancka w ogóle, ale działa tak, jak sądzę, źle się z tym zgadzam.

+11

Szukałem czegoś bardziej eleganckiego, ale skończyło się na tym. Nawiasem mówiąc, nie trzeba zmieniać nazwy zmiennej: '' działa dobrze i może być mniej kłopotliwe . – Dmitri

0

Wiem, że jest bardzo późno na udzielenie odpowiedzi na to pytanie, ale może być pomocne dla tych, którzy utknęli w tej sytuacji i szukają odpowiedzi.

Moja odpowiedź zadziała, jeśli nie będziesz musiał używać znacznika <jsp: include>, aby dołączyć jsp. Zamiast tego możesz użyć <%@include file="/WEB-INF/views/path-to-jsp.jsp" %>, aby zaimportować inny plik JSP na stronę, a ta strona może użyć zmiennej pętli znacznika <c:forEach>.

Na przykład.

<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> 

To działa, ponieważ <%@include file="" %> tag będzie wstrzyknąć zawartość wskazanego pliku do JSP zawierające znacznik, jakby był skopiowany i wklejony. Robi się to przed przetworzeniem zawartości dołączonego pliku, a następnie analizowaniem go podczas analizowania zawierającego JSP. Jest to bardziej zbliżone do dyrektywy C#include, w której podczas wstępnego przetwarzania dołączony plik jest "wklejany" na miejsce przed skompilowaniem pliku. Po uwzględnieniu zawartości jest ona oceniana, wszystkie w tym samym kontekście, a zatem z tymi samymi dostępami i ograniczeniami, które zawierałby kod, gdyby zawartość była po prostu wpisana na miejscu.

Podczas gdy tag zachowuje się inaczej, ponieważ wynik renderowania określonej strony jest wprowadzany do zawierającej JSP w miejscu znacznika. Odbywa się to poprzez przesłanie żądanej strony do tego samego kontenera, jako osobnego żądania renderowania i pobranie wyników, a nie zawartości pliku. To żądanie jest wykonywane we własnym kontekście, co oznacza, że ​​nie używa tych samych informacji o stronie, co strona zawierająca tag. Może to być przydatne, zwłaszcza jeśli na przykład dołączona treść może zawierać zmienne powodujące konflikt.