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