Domanda

Dire che ho il seguente per ciascuna in una definizione di layout strisce

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

Poi, quando io rendo faccio qualcosa di simile

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

L'qualunque componente è resa prima di essere immesso nel layout così bar è nullo e fallisce. C'è un modo per costruire una pagina intera prima che il jsp viene analizzato?

È stato utile?

Soluzione

Vedendo l'assenza di qualsiasi risposta e la domanda guardando abbastanza banale, non credo che ci sono molti utenti Stripes qui fuori. ecco i miei due centesimi:

Questo è sicuramente un problema di scoping. il <s:layout-component> non ha accesso al campo di applicazione page / ciclo della pagina padre. problema simile esiste in JSP / JSTL quando si esegue una <jsp:include> all'interno di un <c:forEach>. La variabile del ciclo è inaccessibile nel frammento di codice incluso da <jsp:include>. Ma in JSP / JSTL che potrebbe essere risolto facendo passare un <jsp:param> lungo la <jsp:include>. Ho preso un rapido sguardo nella documentazione Stripes e ho scoperto un <stripes:param> . Vedere se questo aiuta. Almeno qui è una JSP / JSTL base SSCCE per ottenere l'idea:

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>

uscita:

foo
bar
waa
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top