Posso spezzare un ciclo foreach jsp con strisce layout
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?
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