Подтвердить что ты не робот

Передача переменной c: forEach в jsp: include

Я пытаюсь получить доступ к некоторым переменным JSTL, которые были установлены в JSTL for-loop в include.

Пример:

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

Внутри helper.jsp Я хочу иметь возможность ссылаться на переменную 'entry'. Он продолжает расти как "пустой". Я подумал, возможно, может быть способ добавить область к переменной forEach, как вы можете, с обычными заданными переменными.

Любые идеи?

4b9b3361

Ответ 1

ОТВЕТ: В итоге мне просто нужно было сделать это, чтобы заставить его работать.

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

Затем я ссылался на entryFC в моем include. Не очень элегантный вообще, но его работа, поэтому я думаю, что плохо с этим.

Ответ 2

Я знаю, что очень поздно ответить на этот вопрос, но может быть полезен тем, кто застрял в этой ситуации и ищет ответы.

Мой ответ будет работать, если вы не будете тесно привязаны к тегу <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 будет разбираться. Это больше похоже на директиву С#include, где во время предварительной обработки включенный файл "вставлен" на место перед компиляцией файла. После того, как контент включен, он оценивается, все в том же контексте и, следовательно, с теми же доступами и ограничениями, которые включил бы код, если бы содержимое было просто введено на место.

В то время как тег <jsp:include page=""/> ведет себя по-другому, поскольку результат рендеринга указанной страницы вводится в содержащий JSP в точке тега. Это делается путем отправки запрашиваемой страницы в один и тот же контейнер, как отдельный запрос на визуализацию, и получения результатов, а не содержимого файла. Этот запрос выполняется в его собственном контексте, то есть он не использует ту же страницу, что и страница, содержащая тег. Это может быть удобно, особенно если включенное содержимое может иметь конфликтующие переменные, например.