Передача переменной c: forEach в jsp: include - PullRequest
17 голосов
/ 18 октября 2011

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

Пример:

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

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

Есть идеи?

Ответы [ 2 ]

28 голосов
/ 04 ноября 2011

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

<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 в моем включении. Не очень элегантно, но он работает, так что, думаю, я с ним не справлюсь.

1 голос
/ 15 июня 2017

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

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

...