Frage

sagen, ich habe Layout-Definition die folgenden für jede in einem Streifen

<c:foreach items="${foo}" var="bar" >
     <s:layout-component name="whatever" />
</c:foreach>

Wenn ich dann mache mich so etwas wie diese

<s:layout-component name="whatever">
    //Do something with bar
</s:layout-component>

Das was Komponente gemacht wird, bevor sie im Layout platziert wird, so bar ist null und es funktioniert nicht. Gibt es eine Weise, die ich eine ganze Seite, bevor die jsp analysiert wird aufbauen können?

War es hilfreich?

Lösung

Sehen das Fehlen einer Antwort und die Frage suchen ziemlich trivial, ich glaube nicht, gibt es hier viele Streifen Benutzer aus. so hier sind meine zwei Cent:

Dies ist definitiv ein Scoping-Problem. hat der <s:layout-component> keinen Zugriff auf die Seite / Schleife Umfang der übergeordneten Seite hat. Ein ähnliches Problem gibt es in JSP / JSTL, wenn Sie tun, um eine <jsp:include> in einem <c:forEach>. Die Schleifenvariable ist unzugänglich im Codefragment durch <jsp:include> enthalten. Aber in JSP / JSTL, die durch Leiten eines <jsp:param> entlang der <jsp:include> gelöst werden konnten. Ich nahm einen kurzen Blick in die Dokumentation Stripes und ich entdeckte eine <stripes:param> . Prüfen Sie, ob das hilft. Wenigstens hier ist eine JSP / JSTL basierend SSCCE die Idee zu bekommen:

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

include.jsp

${param.item}<br>

Ausgabe:

foo
bar
waa
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top