Вопрос

Допустим, у меня есть следующее для каждого определения макета в полоску

<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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top