Я знаю, что уже очень поздно отвечать на этот вопрос, но он может быть полезен тем, кто застрял в этой ситуации и ищет ответы.
Мой ответ сработает, если вы не обязаны использовать его<jsp: include>
тег для включения JSP.Вместо этого вы можете использовать <%@include file="/WEB-INF/views/path-to-jsp.jsp" %>
для импорта другого jsp на странице, а на этой странице можно использовать вашу <c:forEach>
переменную циклического тега.
Например.
<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>
Это работает, потому чтоТег <%@include file="" %>
вставит содержимое именованного файла в JSP, содержащую тег, как если бы он был скопирован и вставлен.Это делается до того, как анализируется содержимое включенного файла, вместо этого выполняется его анализ, когда анализируется содержащий JSP.Это больше похоже на директиву C #include, в которой во время предварительной обработки включенный файл «вставляется» на место перед его компиляцией.После включения содержимого оно оценивается в одном и том же контексте и, следовательно, с теми же правами доступа и ограничениями, которые имел бы включенный код, если бы содержимое было просто набрано.
Принимая во внимание, тег <jsp:include page=""/>
ведет себя по-разному в том, что результат рендеринга указанной страницы вводится в содержащий JSP в точке тега.Это делается путем отправки запрашиваемой страницы в тот же контейнер в виде отдельного запроса рендеринга и получения результатов, а не содержимого файла.Этот запрос выполняется в своем собственном контексте, то есть он не использует ту же информацию о странице, что и страница, содержащая тег.Это может быть удобно, особенно если включенное содержимое может иметь конфликтующие переменные, например.