Могу ли я разбить цикл jsp foreach на макеты stripes
Вопрос
Допустим, у меня есть следующее для каждого определения макета в полоску
<c:foreach items="${foo}" var="bar" >
<s:layout-component name="whatever" />
</c:foreach>
Затем, когда я рендерю, я делаю что-то вроде этого
<s:layout-component name="whatever">
//Do something with bar
</s:layout-component>
Любой компонент визуализируется перед размещением в макете, поэтому bar имеет значение null и завершается сбоем.Есть ли способ, которым я могу создать целую страницу до того, как jsp будет проанализирован?
Решение
Видя отсутствие какого-либо ответа и вопрос, выглядящий довольно тривиально, я не думаю, что здесь много пользователей Stripes.итак , вот мои два цента:
Это определенно проблема с охватом.в <s:layout-component>
не имеет доступа к области страницы / цикла родительской страницы.Аналогичная проблема существует в JSP / JSTL, когда вы выполняете <jsp:include>
внутри a <c:forEach>
.Переменная цикла недоступна во фрагменте кода, включенном <jsp:include>
.Но в JSP / JSTL это можно было бы решить, передав <jsp:param>
вдоль <jsp:include>
.Я быстро просмотрел документацию Stripes и обнаружил <stripes:param>
.Посмотрим, поможет ли это.По крайней мере, вот основанный на JSP / JSTL ССКСЕ чтобы уловить идею:
main.jsp главный.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
// Just for demo purposes. Do NOT use scriptlets in real work.
request.setAttribute("items", java.util.Arrays.asList("foo", "bar", "waa"));
%>
<c:forEach items="${items}" var="item">
<jsp:include page="include.jsp">
<jsp:param name="item" value="${item}" />
</jsp:include>
</c:forEach>
включить.jsp
${param.item}<br>
выходной сигнал:
foo
bar
waa